From 8a6b8b91ef2f09a456c5ce370023261b6a3ccc42 Mon Sep 17 00:00:00 2001 From: LunaGod Date: Mon, 22 Mar 2021 10:10:17 +0800 Subject: [PATCH 1/6] feat: use serve-static middleware support dev --- package.json | 6 +- src/index.ts | 173 ++++++++++++++++++++++++++++++--------------- yarn.lock | 193 +++++++++++++++++++++++++++++++++++++++++++++------ 3 files changed, 290 insertions(+), 82 deletions(-) diff --git a/package.json b/package.json index b8aee37..230fea5 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,14 @@ }, "dependencies": { "fs-extra": "^9.1.0", - "rollup-plugin-external-globals": "^0.6.1" + "rollup-plugin-external-globals": "^0.6.1", + "serve-static": "^1.14.1" }, "devDependencies": { "@tsconfig/node12": "^1.0.7", "@types/fs-extra": "^9.0.8", "@types/node": "^14.14.31", + "@types/serve-static": "^1.13.9", "typescript": "^4.2.2", "vite": "^2.0.4" }, @@ -39,4 +41,4 @@ "cesium": "^1.79.0", "vite": "^2.0.4" } -} \ No newline at end of file +} diff --git a/src/index.ts b/src/index.ts index f423c93..01178e3 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,70 +1,129 @@ -import path from 'path'; -import { Plugin, UserConfig, HtmlTagDescriptor } from 'vite'; -import fs from 'fs-extra'; +import path from "path"; +import { Plugin, UserConfig, HtmlTagDescriptor } from "vite"; +import fs from "fs-extra"; import externalGlobals from "rollup-plugin-external-globals"; +import serveStatic from "serve-static"; -type options = { rebuildCesium: boolean; }; +interface VitePluginCesiumOptions { + rebuildCesium?: boolean; + minifyCesium?: boolean; +} -export default function ({ rebuildCesium }: options = { rebuildCesium: false }): Plugin { +function vitePluginCesium( + options: VitePluginCesiumOptions = { + rebuildCesium: false, + minifyCesium: false, + } +): Plugin { + const { rebuildCesium, minifyCesium } = options; - const cesiumBuildPath = 'node_modules/cesium/Build/Cesium/'; - let publicPath = 'public'; + const cesiumBuildRootPath = "node_modules/cesium/Build"; + const cesiumBuildPath = "node_modules/cesium/Build/Cesium/"; + const CESIUM_BASE_URL = "/cesium/"; - return { - name: 'vite-plugin-cesium', + let publicPath = "public"; + let outDir = "dist"; + let base: string; + let isBuild: boolean = false; - 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; + return { + name: "vite-plugin-cesium", + + config(_, { command }) { + const userConfig: UserConfig = { + build: { + assetsInlineLimit: 0, + chunkSizeWarningLimit: 4000, }, - - configResolved(resolvedConfig) { - publicPath = resolvedConfig.publicDir; + define: { + CESIUM_BASE_URL, }, + }; + if (command === "build" && !rebuildCesium) { + userConfig.build!.rollupOptions = { + external: ["cesium"], + plugins: [externalGlobals({ cesium: "Cesium" })], + }; + } - async buildStart(options) { - try { - 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')); + return userConfig; + }, - } - 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')); - } + configResolved(resolvedConfig) { + publicPath = resolvedConfig.publicDir; + outDir = resolvedConfig.build.outDir; + base = resolvedConfig.base; + isBuild = + resolvedConfig.isProduction || resolvedConfig.command === "build"; + }, - } catch (err) { - console.error('copy failed', err); - } + configureServer({ middlewares }) { + const cesiumPath = path.join( + cesiumBuildRootPath, + minifyCesium ? "Cesium" : "CesiumUnminified" + ); + middlewares.use(CESIUM_BASE_URL, serveStatic(cesiumPath)); + }, + + async buildStart() { + if (isBuild) { + const exists = await fs.pathExists(path.join(publicPath, "cesium")); + + if (!exists) { + try { + 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") + ); + } catch (err) { + console.error("copy failed", err); + } + } + 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") + ); + } + } + }, + async renderStart() { + const existOutDir = await fs.pathExists(path.join(outDir, "cesium")); + if (existOutDir) { + await fs.remove(path.join(publicPath, "cesium")); + } + }, + + transformIndexHtml() { + const tags: HtmlTagDescriptor[] = [ + { + tag: "link", + attrs: { + rel: "stylesheet", + href: base + "cesium/Widgets/widgets.css", + }, }, + ]; + if (!rebuildCesium) { + tags.push({ tag: "script", attrs: { src: base + "cesium/Cesium.js" } }); + } + return tags; + }, + }; +} - transformIndexHtml() { - 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 +export default vitePluginCesium; diff --git a/yarn.lock b/yarn.lock index 525a8f0..5df75c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27,31 +27,86 @@ dependencies: "@types/node" "*" +"@types/mime@^1": + version "1.3.2" + resolved "https://registry.npm.taobao.org/@types/mime/download/@types/mime-1.3.2.tgz#93e25bf9ee75fe0fd80b594bc4feb0e862111b5a" + integrity sha1-k+Jb+e51/g/YC1lLxP6w6GIRG1o= + "@types/node@*", "@types/node@^14.14.31": version "14.14.31" resolved "https://registry.npm.taobao.org/@types/node/download/@types/node-14.14.31.tgz?cache=0&sync_timestamp=1613758114120&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-14.14.31.tgz#72286bd33d137aa0d152d47ec7c1762563d34055" integrity sha1-cihr0z0TeqDRUtR+x8F2JWPTQFU= +"@types/serve-static@^1.13.9": + version "1.13.9" + resolved "https://registry.npm.taobao.org/@types/serve-static/download/@types/serve-static-1.13.9.tgz#aacf28a85a05ee29a11fb7c3ead935ac56f33e4e" + integrity sha1-qs8oqFoF7imhH7fD6tk1rFbzPk4= + dependencies: + "@types/mime" "^1" + "@types/node" "*" + at-least-node@^1.0.0: version "1.0.0" resolved "https://registry.npm.taobao.org/at-least-node/download/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha1-YCzUtG6EStTv/JKoARo8RuAjjcI= -colorette@^1.2.1: +colorette@^1.2.2: version "1.2.2" resolved "https://registry.npm.taobao.org/colorette/download/colorette-1.2.2.tgz?cache=0&sync_timestamp=1614259647923&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcolorette%2Fdownload%2Fcolorette-1.2.2.tgz#cbcc79d5e99caea2dbf10eb3a26fd8b3e6acfa94" integrity sha1-y8x51emcrqLb8Q6zom/Ys+as+pQ= -esbuild@^0.8.52: - version "0.8.54" - 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= +debug@2.6.9: + version "2.6.9" + resolved "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz?cache=0&sync_timestamp=1607566580543&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fdebug%2Fdownload%2Fdebug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8= + dependencies: + ms "2.0.0" + +depd@~1.1.2: + version "1.1.2" + resolved "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" + integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= + +destroy@~1.0.4: + version "1.0.4" + resolved "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" + integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +esbuild@^0.9.3: + version "0.9.6" + resolved "https://registry.npm.taobao.org/esbuild/download/esbuild-0.9.6.tgz#2cae519e7ce2328ecf57ae738090d07ce7245850" + integrity sha1-LK5RnnziMo7PV65zgJDQfOckWFA= + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= 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= +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= + 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" @@ -64,7 +119,7 @@ fs-extra@^9.1.0: fsevents@~2.3.1: version "2.3.2" - resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612536546156&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + resolved "https://registry.npm.taobao.org/fsevents/download/fsevents-2.3.2.tgz?cache=0&sync_timestamp=1612537044236&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ffsevents%2Fdownload%2Ffsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" integrity sha1-ilJveLj99GI7cJ4Ll1xSwkwC/Ro= function-bind@^1.1.1: @@ -84,9 +139,25 @@ has@^1.0.3: dependencies: function-bind "^1.1.1" +http-errors@~1.7.2: + version "1.7.3" + resolved "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" + integrity sha1-bGGeT5xgMIw4UZSYwU+7EKrOuwY= + dependencies: + depd "~1.1.2" + inherits "2.0.4" + setprototypeof "1.1.1" + statuses ">= 1.5.0 < 2" + toidentifier "1.0.0" + +inherits@2.0.4: + version "2.0.4" + resolved "https://registry.npm.taobao.org/inherits/download/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w= + is-core-module@^2.2.0: version "2.2.0" - resolved "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz?cache=0&sync_timestamp=1606411557629&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fis-core-module%2Fdownload%2Fis-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" + resolved "https://registry.npm.taobao.org/is-core-module/download/is-core-module-2.2.0.tgz#97037ef3d52224d85163f5597b2b63d9afed981a" integrity sha1-lwN+89UiJNhRY/VZeytj2a/tmBo= dependencies: has "^1.0.3" @@ -114,10 +185,37 @@ magic-string@^0.25.7: dependencies: sourcemap-codec "^1.4.4" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1613584754851&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE= + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz?cache=0&sync_timestamp=1607433905701&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fms%2Fdownload%2Fms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo= + nanoid@^3.1.20: - version "3.1.20" - resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.20.tgz#badc263c6b1dcf14b71efaa85f6ab4c1d6cfc788" - integrity sha1-utwmPGsdzxS3HvqoX2q0wdbPx4g= + version "3.1.22" + resolved "https://registry.npm.taobao.org/nanoid/download/nanoid-3.1.22.tgz?cache=0&sync_timestamp=1615820310415&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fnanoid%2Fdownload%2Fnanoid-3.1.22.tgz#b35f8fb7d151990a8aebd5aa5015c03cf726f844" + integrity sha1-s1+Pt9FRmQqK69WqUBXAPPcm+EQ= + +on-finished@~2.3.0: + version "2.3.0" + resolved "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" + integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= + dependencies: + ee-first "1.1.1" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ= path-parse@^1.0.6: version "1.0.6" @@ -130,17 +228,22 @@ picomatch@^2.2.2: 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" - integrity sha1-XWmpdFQ7Rfh+RkvEw+OSqX1r6f4= + version "8.2.8" + resolved "https://registry.npm.taobao.org/postcss/download/postcss-8.2.8.tgz?cache=0&sync_timestamp=1615327834455&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fpostcss%2Fdownload%2Fpostcss-8.2.8.tgz#0b90f9382efda424c4f0f69a2ead6f6830d08ece" + integrity sha1-C5D5OC79pCTE8PaaLq1vaDDQjs4= dependencies: - colorette "^1.2.1" + colorette "^1.2.2" nanoid "^3.1.20" source-map "^0.6.1" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE= + resolve@^1.19.0: version "1.20.0" - resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz?cache=0&sync_timestamp=1613054898763&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fresolve%2Fdownload%2Fresolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" + resolved "https://registry.npm.taobao.org/resolve/download/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975" integrity sha1-YpoBP7P3B1XW8LeTXMHCxTeLGXU= dependencies: is-core-module "^2.2.0" @@ -157,15 +260,49 @@ rollup-plugin-external-globals@^0.6.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" - integrity sha1-78IY6u3nq1kJVN9Q+WGVGImZwwQ= + version "2.42.1" + resolved "https://registry.npm.taobao.org/rollup/download/rollup-2.42.1.tgz#6d675b7971e3bee510935326a0f7e556bb7d43de" + integrity sha1-bWdbeXHjvuUQk1MmoPflVrt9Q94= optionalDependencies: fsevents "~2.3.1" +send@0.17.1: + version "0.17.1" + resolved "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" + integrity sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg= + dependencies: + debug "2.6.9" + depd "~1.1.2" + destroy "~1.0.4" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "~1.7.2" + mime "1.6.0" + ms "2.1.1" + on-finished "~2.3.0" + range-parser "~1.2.1" + statuses "~1.5.0" + +serve-static@^1.14.1: + version "1.14.1" + resolved "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" + integrity sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk= + dependencies: + encodeurl "~1.0.2" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.17.1" + +setprototypeof@1.1.1: + version "1.1.1" + resolved "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" + integrity sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM= + source-map@^0.6.1: version "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" + resolved "https://registry.npm.taobao.org/source-map/download/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha1-dHIq8y6WFOnCh6jQu95IteLxomM= sourcemap-codec@^1.4.4: @@ -173,6 +310,16 @@ sourcemap-codec@^1.4.4: resolved "https://registry.npm.taobao.org/sourcemap-codec/download/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" integrity sha1-6oBL2UhXQC5pktBaOO8a41qatMQ= +"statuses@>= 1.5.0 < 2", statuses@~1.5.0: + version "1.5.0" + resolved "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1609653993999&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= + +toidentifier@1.0.0: + version "1.0.0" + resolved "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" + integrity sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM= + 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" @@ -184,11 +331,11 @@ universalify@^2.0.0: integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc= vite@^2.0.4: - version "2.0.4" - resolved "https://registry.npm.taobao.org/vite/download/vite-2.0.4.tgz#063532a4139b59a067297d8ebb5960d450907a09" - integrity sha1-BjUypBObWaBnKX2Ou1lg1FCQegk= + version "2.1.2" + resolved "https://registry.npm.taobao.org/vite/download/vite-2.1.2.tgz#0aecaf6d34112b24536df1a14cd8d74fdcab6e20" + integrity sha1-CuyvbTQRKyRTbfGhTNjXT9yrbiA= dependencies: - esbuild "^0.8.52" + esbuild "^0.9.3" postcss "^8.2.1" resolve "^1.19.0" rollup "^2.38.5" From a89b61672ab3e2b214be9d5f55dcc39fb294dae1 Mon Sep 17 00:00:00 2001 From: LunaGod Date: Mon, 22 Mar 2021 10:12:16 +0800 Subject: [PATCH 2/6] chore: add prettier --- .prettierrc | 5 +++++ package.json | 4 +++- yarn.lock | 5 +++++ 3 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 .prettierrc diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b89bc72 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,5 @@ +semi: true +tabWidth: 2 +singleQuote: true +printWidth: 80 +trailingComma: none \ No newline at end of file diff --git a/package.json b/package.json index 230fea5..3145c1b 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "dist" ], "scripts": { - "build": "tsc" + "build": "tsc", + "dev": "tsc -w" }, "keywords": [ "vite", @@ -34,6 +35,7 @@ "@types/fs-extra": "^9.0.8", "@types/node": "^14.14.31", "@types/serve-static": "^1.13.9", + "prettier": "^2.2.1", "typescript": "^4.2.2", "vite": "^2.0.4" }, diff --git a/yarn.lock b/yarn.lock index 5df75c0..676ed7a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -236,6 +236,11 @@ postcss@^8.2.1: nanoid "^3.1.20" source-map "^0.6.1" +prettier@^2.2.1: + version "2.2.1" + resolved "https://registry.npm.taobao.org/prettier/download/prettier-2.2.1.tgz?cache=0&sync_timestamp=1606523097359&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fprettier%2Fdownload%2Fprettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5" + integrity sha1-eVoaeN1S8HPaDNQrIfnJE4GSP/U= + range-parser@~1.2.1: version "1.2.1" resolved "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" From 0e7163bd6320d0bc6fbb205c936c5dc51890c7f5 Mon Sep 17 00:00:00 2001 From: LunaGod Date: Mon, 22 Mar 2021 10:26:22 +0800 Subject: [PATCH 3/6] style: code format --- src/index.ts | 84 ++++++++++++++++++++++++++-------------------------- 1 file changed, 42 insertions(+), 42 deletions(-) diff --git a/src/index.ts b/src/index.ts index 01178e3..8c9aeb8 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,8 @@ -import path from "path"; -import { Plugin, UserConfig, HtmlTagDescriptor } from "vite"; -import fs from "fs-extra"; -import externalGlobals from "rollup-plugin-external-globals"; -import serveStatic from "serve-static"; +import path from 'path'; +import { Plugin, UserConfig, HtmlTagDescriptor } from 'vite'; +import fs from 'fs-extra'; +import externalGlobals from 'rollup-plugin-external-globals'; +import serveStatic from 'serve-static'; interface VitePluginCesiumOptions { rebuildCesium?: boolean; @@ -12,37 +12,37 @@ interface VitePluginCesiumOptions { function vitePluginCesium( options: VitePluginCesiumOptions = { rebuildCesium: false, - minifyCesium: false, + minifyCesium: false } ): Plugin { const { rebuildCesium, minifyCesium } = options; - const cesiumBuildRootPath = "node_modules/cesium/Build"; - const cesiumBuildPath = "node_modules/cesium/Build/Cesium/"; - const CESIUM_BASE_URL = "/cesium/"; + const cesiumBuildRootPath = 'node_modules/cesium/Build'; + const cesiumBuildPath = 'node_modules/cesium/Build/Cesium/'; + const CESIUM_BASE_URL = '/cesium/'; - let publicPath = "public"; - let outDir = "dist"; + let publicPath = 'public'; + let outDir = 'dist'; let base: string; let isBuild: boolean = false; return { - name: "vite-plugin-cesium", + name: 'vite-plugin-cesium', config(_, { command }) { const userConfig: UserConfig = { build: { assetsInlineLimit: 0, - chunkSizeWarningLimit: 4000, + chunkSizeWarningLimit: 4000 }, define: { - CESIUM_BASE_URL, - }, + CESIUM_BASE_URL + } }; - if (command === "build" && !rebuildCesium) { + if (command === 'build' && !rebuildCesium) { userConfig.build!.rollupOptions = { - external: ["cesium"], - plugins: [externalGlobals({ cesium: "Cesium" })], + external: ['cesium'], + plugins: [externalGlobals({ cesium: 'Cesium' })] }; } @@ -54,75 +54,75 @@ function vitePluginCesium( outDir = resolvedConfig.build.outDir; base = resolvedConfig.base; isBuild = - resolvedConfig.isProduction || resolvedConfig.command === "build"; + resolvedConfig.isProduction || resolvedConfig.command === 'build'; }, configureServer({ middlewares }) { const cesiumPath = path.join( cesiumBuildRootPath, - minifyCesium ? "Cesium" : "CesiumUnminified" + minifyCesium ? 'Cesium' : 'CesiumUnminified' ); middlewares.use(CESIUM_BASE_URL, serveStatic(cesiumPath)); }, async buildStart() { if (isBuild) { - const exists = await fs.pathExists(path.join(publicPath, "cesium")); + const exists = await fs.pathExists(path.join(publicPath, 'cesium')); if (!exists) { try { await fs.copy( - path.join(cesiumBuildPath, "Assets"), - path.join(publicPath, "cesium/Assets") + path.join(cesiumBuildPath, 'Assets'), + path.join(publicPath, 'cesium/Assets') ); await fs.copy( - path.join(cesiumBuildPath, "ThirdParty"), - path.join(publicPath, "cesium/ThirdParty") + path.join(cesiumBuildPath, 'ThirdParty'), + path.join(publicPath, 'cesium/ThirdParty') ); await fs.copy( - path.join(cesiumBuildPath, "Workers"), - path.join(publicPath, "cesium/Workers") + path.join(cesiumBuildPath, 'Workers'), + path.join(publicPath, 'cesium/Workers') ); await fs.copy( - path.join(cesiumBuildPath, "Widgets"), - path.join(publicPath, "cesium/Widgets") + path.join(cesiumBuildPath, 'Widgets'), + path.join(publicPath, 'cesium/Widgets') ); } catch (err) { - console.error("copy failed", err); + console.error('copy failed', err); } } if (rebuildCesium) { - await fs.remove(path.join(publicPath, "cesium/Cesium.js")); + await fs.remove(path.join(publicPath, 'cesium/Cesium.js')); } else { await fs.copy( - path.join(cesiumBuildPath, "Cesium.js"), - path.join(publicPath, "cesium/Cesium.js") + path.join(cesiumBuildPath, 'Cesium.js'), + path.join(publicPath, 'cesium/Cesium.js') ); } } }, async renderStart() { - const existOutDir = await fs.pathExists(path.join(outDir, "cesium")); + const existOutDir = await fs.pathExists(path.join(outDir, 'cesium')); if (existOutDir) { - await fs.remove(path.join(publicPath, "cesium")); + await fs.remove(path.join(publicPath, 'cesium')); } }, transformIndexHtml() { const tags: HtmlTagDescriptor[] = [ { - tag: "link", + tag: 'link', attrs: { - rel: "stylesheet", - href: base + "cesium/Widgets/widgets.css", - }, - }, + rel: 'stylesheet', + href: base + 'cesium/Widgets/widgets.css' + } + } ]; if (!rebuildCesium) { - tags.push({ tag: "script", attrs: { src: base + "cesium/Cesium.js" } }); + tags.push({ tag: 'script', attrs: { src: base + 'cesium/Cesium.js' } }); } return tags; - }, + } }; } From f3ab897128a752e3b5585b122ea413c362ac54d1 Mon Sep 17 00:00:00 2001 From: nshen Date: Mon, 22 Mar 2021 15:08:10 +0800 Subject: [PATCH 4/6] feat: copy to outDir --- src/index.ts | 56 ++++++++++++++++++++-------------------------------- 1 file changed, 21 insertions(+), 35 deletions(-) diff --git a/src/index.ts b/src/index.ts index 8c9aeb8..ed7358c 100644 --- a/src/index.ts +++ b/src/index.ts @@ -65,48 +65,34 @@ function vitePluginCesium( middlewares.use(CESIUM_BASE_URL, serveStatic(cesiumPath)); }, - async buildStart() { + async closeBundle() { if (isBuild) { - const exists = await fs.pathExists(path.join(publicPath, 'cesium')); - - if (!exists) { - try { - 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') - ); - } catch (err) { - console.error('copy failed', err); - } - } - if (rebuildCesium) { - await fs.remove(path.join(publicPath, 'cesium/Cesium.js')); - } else { + try { + await fs.copy( + path.join(cesiumBuildPath, 'Assets'), + path.join(outDir, 'cesium/Assets') + ); + await fs.copy( + path.join(cesiumBuildPath, 'ThirdParty'), + path.join(outDir, 'cesium/ThirdParty') + ); + await fs.copy( + path.join(cesiumBuildPath, 'Workers'), + path.join(outDir, 'cesium/Workers') + ); + await fs.copy( + path.join(cesiumBuildPath, 'Widgets'), + path.join(outDir, 'cesium/Widgets') + ); await fs.copy( path.join(cesiumBuildPath, 'Cesium.js'), - path.join(publicPath, 'cesium/Cesium.js') + path.join(outDir, 'cesium/Cesium.js') ); + } catch (err) { + console.error('copy failed', err); } } }, - async renderStart() { - const existOutDir = await fs.pathExists(path.join(outDir, 'cesium')); - if (existOutDir) { - await fs.remove(path.join(publicPath, 'cesium')); - } - }, transformIndexHtml() { const tags: HtmlTagDescriptor[] = [ From 59f16a24197bdefc09c2b7a2ebc970004bd023f9 Mon Sep 17 00:00:00 2001 From: LunaGod Date: Mon, 22 Mar 2021 17:03:04 +0800 Subject: [PATCH 5/6] fix: copy cesium.js when rebuildCesium is false --- src/index.ts | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index ed7358c..34ce315 100644 --- a/src/index.ts +++ b/src/index.ts @@ -84,10 +84,12 @@ function vitePluginCesium( path.join(cesiumBuildPath, 'Widgets'), path.join(outDir, 'cesium/Widgets') ); - await fs.copy( - path.join(cesiumBuildPath, 'Cesium.js'), - path.join(outDir, 'cesium/Cesium.js') - ); + if (!rebuildCesium) { + await fs.copy( + path.join(cesiumBuildPath, 'Cesium.js'), + path.join(outDir, 'cesium/Cesium.js') + ); + } } catch (err) { console.error('copy failed', err); } From 4f4fad37510181ac7441579d5f7f429b9266a3f5 Mon Sep 17 00:00:00 2001 From: LunaGod Date: Mon, 22 Mar 2021 19:53:43 +0800 Subject: [PATCH 6/6] fix: replace option minifyCesium with devMinifyCesium --- src/index.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/index.ts b/src/index.ts index 34ce315..90c8b34 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,16 +6,16 @@ import serveStatic from 'serve-static'; interface VitePluginCesiumOptions { rebuildCesium?: boolean; - minifyCesium?: boolean; + devMinifyCesium?: boolean; } function vitePluginCesium( options: VitePluginCesiumOptions = { rebuildCesium: false, - minifyCesium: false + devMinifyCesium: false } ): Plugin { - const { rebuildCesium, minifyCesium } = options; + const { rebuildCesium, devMinifyCesium } = options; const cesiumBuildRootPath = 'node_modules/cesium/Build'; const cesiumBuildPath = 'node_modules/cesium/Build/Cesium/'; @@ -60,7 +60,7 @@ function vitePluginCesium( configureServer({ middlewares }) { const cesiumPath = path.join( cesiumBuildRootPath, - minifyCesium ? 'Cesium' : 'CesiumUnminified' + devMinifyCesium ? 'Cesium' : 'CesiumUnminified' ); middlewares.use(CESIUM_BASE_URL, serveStatic(cesiumPath)); },