diff --git a/package.json b/package.json index 168b4c1..afa95ab 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,8 @@ "url": "https://github.com/nshen/vite-plugin-cesium/issues" }, "dependencies": { - "fs-extra": "^9.1.0" + "fs-extra": "^9.1.0", + "rollup-plugin-external-globals": "^0.6.1" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", @@ -38,4 +39,4 @@ "cesium": "^1.79.0", "vite": "^2.0.4" } -} \ No newline at end of file +} diff --git a/src/env.d.ts b/src/env.d.ts new file mode 100644 index 0000000..8baa13b --- /dev/null +++ b/src/env.d.ts @@ -0,0 +1 @@ +declare module 'rollup-plugin-external-globals' \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 8508404..f423c93 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,11 @@ import path from 'path'; -import { Plugin } from 'vite'; +import { Plugin, UserConfig, HtmlTagDescriptor } from 'vite'; import fs from 'fs-extra'; +import externalGlobals from "rollup-plugin-external-globals"; -export default function (): Plugin { +type options = { rebuildCesium: boolean; }; + +export default function ({ rebuildCesium }: options = { rebuildCesium: false }): Plugin { const cesiumBuildPath = 'node_modules/cesium/Build/Cesium/'; let publicPath = 'public'; @@ -10,45 +13,58 @@ export default function (): Plugin { return { name: 'vite-plugin-cesium', + config(config, { command }) { + const userConfig: UserConfig = { + build: { + assetsInlineLimit: 0, + chunkSizeWarningLimit: 4000 + }, + define: { + CESIUM_BASE_URL: '/cesium/' + } + }; + if (command === 'build' && !rebuildCesium) { + userConfig.build!.rollupOptions = { + external: ['cesium'], + plugins: [ + externalGlobals({ cesium: "Cesium" }) + ] + }; + } + return userConfig; + }, + configResolved(resolvedConfig) { publicPath = resolvedConfig.publicDir; }, async buildStart(options) { try { - const exists = await fs.pathExists(path.join(publicPath, 'cesium/Assets')); + const exists = await fs.pathExists(path.join(publicPath, 'cesium')); if (!exists) { await fs.copy(path.join(cesiumBuildPath, 'Assets'), path.join(publicPath, 'cesium/Assets')); await fs.copy(path.join(cesiumBuildPath, 'ThirdParty'), path.join(publicPath, 'cesium/ThirdParty')); await fs.copy(path.join(cesiumBuildPath, 'Workers'), path.join(publicPath, 'cesium/Workers')); await fs.copy(path.join(cesiumBuildPath, 'Widgets'), path.join(publicPath, 'cesium/Widgets')); + + } + if (rebuildCesium) { + await fs.remove(path.join(publicPath, 'cesium/Cesium.js')); + } else { + await fs.copy(path.join(cesiumBuildPath, 'Cesium.js'), path.join(publicPath, 'cesium/Cesium.js')); } } catch (err) { - console.error('copy failed'); + console.error('copy failed', err); } }, - config() { - return { - build: { - assetsInlineLimit: 0, - chunkSizeWarningLimit: 4000 - } - }; - }, - transformIndexHtml() { - return [ - { - tag: 'link', - attrs: { rel: 'stylesheet', href: 'cesium/Widgets/widgets.css' }, - }, - { - tag: 'script', - children: 'window.CESIUM_BASE_URL = "/cesium/"' - } - ]; + const tags: HtmlTagDescriptor[] = [{ tag: 'link', attrs: { rel: 'stylesheet', href: 'cesium/Widgets/widgets.css' } }]; + if (!rebuildCesium) { + tags.push({ tag: 'script', attrs: { src: 'cesium/Cesium.js' } }); + } + return tags; }, }; } \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 4c3887a..525a8f0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,11 +2,24 @@ # yarn lockfile v1 +"@rollup/pluginutils@^4.0.0": + version "4.1.0" + resolved "https://registry.npm.taobao.org/@rollup/pluginutils/download/@rollup/pluginutils-4.1.0.tgz?cache=0&sync_timestamp=1603765949266&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40rollup%2Fpluginutils%2Fdownload%2F%40rollup%2Fpluginutils-4.1.0.tgz#0dcc61c780e39257554feb7f77207dceca13c838" + integrity sha1-Dcxhx4DjkldVT+t/dyB9zsoTyDg= + dependencies: + estree-walker "^2.0.1" + picomatch "^2.2.2" + "@tsconfig/node12@^1.0.7": version "1.0.7" resolved "https://registry.npm.taobao.org/@tsconfig/node12/download/@tsconfig/node12-1.0.7.tgz#677bd9117e8164dc319987dd6ff5fc1ba6fbf18b" integrity sha1-Z3vZEX6BZNwxmYfdb/X8G6b78Ys= +"@types/estree@*": + version "0.0.46" + resolved "https://registry.npm.taobao.org/@types/estree/download/@types/estree-0.0.46.tgz?cache=0&sync_timestamp=1613378493125&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Festree%2Fdownload%2F%40types%2Festree-0.0.46.tgz#0fb6bfbbeabd7a30880504993369c4bf1deab1fe" + integrity sha1-D7a/u+q9ejCIBQSZM2nEvx3qsf4= + "@types/fs-extra@^9.0.8": version "9.0.8" resolved "https://registry.npm.taobao.org/@types/fs-extra/download/@types/fs-extra-9.0.8.tgz#32c3c07ddf8caa5020f84b5f65a48470519f78ba" @@ -34,6 +47,11 @@ esbuild@^0.8.52: resolved "https://registry.npm.taobao.org/esbuild/download/esbuild-0.8.54.tgz?cache=0&sync_timestamp=1614592024973&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fesbuild%2Fdownload%2Fesbuild-0.8.54.tgz#2f32ff80e95c69a0f25b799d76a27c05e2857cdf" integrity sha1-LzL/gOlcaaDyW3mddqJ8BeKFfN8= +estree-walker@^2.0.1: + version "2.0.2" + resolved "https://registry.npm.taobao.org/estree-walker/download/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac" + integrity sha1-UvAQF4wqTBF6d1fP6UKtt9LaTKw= + fs-extra@^9.1.0: version "9.1.0" resolved "https://registry.npm.taobao.org/fs-extra/download/fs-extra-9.1.0.tgz?cache=0&sync_timestamp=1611075555649&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffs-extra%2Fdownload%2Ffs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" @@ -73,6 +91,13 @@ is-core-module@^2.2.0: dependencies: has "^1.0.3" +is-reference@^1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/is-reference/download/is-reference-1.2.1.tgz#8b2dac0b371f4bc994fdeaba9eb542d03002d0b7" + integrity sha1-iy2sCzcfS8mU/eq6nrVC0DAC0Lc= + dependencies: + "@types/estree" "*" + jsonfile@^6.0.1: version "6.1.0" resolved "https://registry.npm.taobao.org/jsonfile/download/jsonfile-6.1.0.tgz?cache=0&sync_timestamp=1604164898625&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fjsonfile%2Fdownload%2Fjsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" @@ -82,6 +107,13 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" +magic-string@^0.25.7: + version "0.25.7" + resolved "https://registry.npm.taobao.org/magic-string/download/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" + integrity sha1-P0l9b9NMZpxnmNy4IfLvMfVEUFE= + dependencies: + sourcemap-codec "^1.4.4" + nanoid@^3.1.20: version "3.1.20" resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" @@ -92,6 +124,11 @@ path-parse@^1.0.6: resolved "https://registry.npm.taobao.org/path-parse/download/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" integrity sha1-1i27VnlAXXLEc37FhgDp3c8G0kw= +picomatch@^2.2.2: + version "2.2.2" + resolved "https://registry.npm.taobao.org/picomatch/download/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" + integrity sha1-IfMz6ba46v8CRo9RRupAbTRfTa0= + postcss@^8.2.1: version "8.2.6" resolved "https://registry.npm.taobao.org/postcss/download/postcss-8.2.6.tgz#5d69a974543b45f87e464bc4c3e392a97d6be9fe" @@ -109,6 +146,16 @@ resolve@^1.19.0: is-core-module "^2.2.0" path-parse "^1.0.6" +rollup-plugin-external-globals@^0.6.1: + version "0.6.1" + resolved "https://registry.npm.taobao.org/rollup-plugin-external-globals/download/rollup-plugin-external-globals-0.6.1.tgz#861c260b5727144e0fd1b424b103f9f0282fc365" + integrity sha1-hhwmC1cnFE4P0bQksQP58Cgvw2U= + dependencies: + "@rollup/pluginutils" "^4.0.0" + estree-walker "^2.0.1" + is-reference "^1.2.1" + magic-string "^0.25.7" + rollup@^2.38.5: version "2.40.0" resolved "https://registry.npm.taobao.org/rollup/download/rollup-2.40.0.tgz#efc218eaede7ab590954df50f96195188999c304" @@ -121,6 +168,11 @@ source-map@^0.6.1: resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz?cache=0&sync_timestamp=1604409581245&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map%2Fdownload%2Fsource-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= +sourcemap-codec@^1.4.4: + version "1.4.8" + resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" + integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= + typescript@^4.2.2: version "4.2.2" resolved "https://registry.npm.taobao.org/typescript/download/typescript-4.2.2.tgz?cache=0&sync_timestamp=1614497564110&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ftypescript%2Fdownload%2Ftypescript-4.2.2.tgz#1450f020618f872db0ea17317d16d8da8ddb8c4c"