From 93aa78a0d35107be3e10867d849a24c401325ba4 Mon Sep 17 00:00:00 2001 From: patak-dev Date: Fri, 26 Aug 2022 23:15:29 +0200 Subject: [PATCH 1/8] feat: rollup 3 (wip) --- package.json | 4 +- packages/plugin-legacy/src/index.ts | 2 +- packages/plugin-vue/package.json | 2 +- packages/vite/package.json | 4 +- packages/vite/src/node/build.ts | 8 +- packages/vite/src/node/plugins/esbuild.ts | 6 +- .../vite/src/node/plugins/splitVendorChunk.ts | 4 +- pnpm-lock.yaml | 128 ++++++++++++++---- 8 files changed, 116 insertions(+), 42 deletions(-) diff --git a/package.json b/package.json index 04df3123ff8c6d..415ee986d319ce 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ "devDependencies": { "@babel/types": "^7.18.10", "@microsoft/api-extractor": "^7.29.3", - "@rollup/plugin-typescript": "^8.3.4", + "@rollup/plugin-typescript": "^8.4.0", "@types/babel__core": "^7.1.19", "@types/babel__standalone": "^7.1.4", "@types/convert-source-map": "^1.5.2", @@ -77,7 +77,7 @@ "prettier": "2.7.1", "prompts": "^2.4.2", "rimraf": "^3.0.2", - "rollup": "~2.78.0", + "rollup": "3.0.0-4", "semver": "^7.3.7", "simple-git-hooks": "^2.8.0", "tslib": "^2.4.0", diff --git a/packages/plugin-legacy/src/index.ts b/packages/plugin-legacy/src/index.ts index 4d51d1cecaf493..00c6b8f4e27f6e 100644 --- a/packages/plugin-legacy/src/index.ts +++ b/packages/plugin-legacy/src/index.ts @@ -390,7 +390,7 @@ function viteLegacyPlugin(options: Options = {}): Plugin[] { configFile: false, compact: !!config.build.minify, sourceMaps, - inputSourceMap: sourceMaps ? chunk.map : undefined, + inputSourceMap: undefined, // sourceMaps ? chunk.map : undefined, `.map` TODO: moved to OutputChunk? presets: [ // forcing our plugin to run before preset-env by wrapping it in a // preset so we can catch the injected import statements... diff --git a/packages/plugin-vue/package.json b/packages/plugin-vue/package.json index 6a74e109625873..97ad23a6dfa65c 100644 --- a/packages/plugin-vue/package.json +++ b/packages/plugin-vue/package.json @@ -42,7 +42,7 @@ "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.15", "debug": "^4.3.4", - "rollup": "~2.78.0", + "rollup": "3.0.0-4", "slash": "^4.0.0", "source-map": "^0.6.1", "vite": "workspace:*", diff --git a/packages/vite/package.json b/packages/vite/package.json index ceb4d2810068f4..5b73a828f1f490 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -61,7 +61,7 @@ "esbuild": "^0.14.47", "postcss": "^8.4.16", "resolve": "^1.22.1", - "rollup": "~2.78.0" + "rollup": "3.0.0-4" }, "optionalDependencies": { "fsevents": "~2.3.2" @@ -76,7 +76,7 @@ "@rollup/plugin-dynamic-import-vars": "^1.4.4", "@rollup/plugin-json": "^4.1.0", "@rollup/plugin-node-resolve": "13.3.0", - "@rollup/plugin-typescript": "^8.3.4", + "@rollup/plugin-typescript": "^8.4.0", "@rollup/pluginutils": "^4.2.1", "acorn": "^8.8.0", "cac": "^6.7.12", diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 34d1bb98ea60fc..a363fbc368235a 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -688,12 +688,12 @@ export function onRollupWarning( config: ResolvedConfig ): void { if (warning.code === 'UNRESOLVED_IMPORT') { - const id = warning.source - const importer = warning.importer + const id = warning.id + const exporter = warning.exporter // throw unless it's commonjs external... - if (!importer || !/\?commonjs-external$/.test(importer)) { + if (!id || !/\?commonjs-external$/.test(id)) { throw new Error( - `[vite]: Rollup failed to resolve import "${id}" from "${importer}".\n` + + `[vite]: Rollup failed to resolve import "${exporter}" from "${id}".\n` + `This is most likely unintended because it can break your application at runtime.\n` + `If you do want to externalize this module explicitly add it to\n` + `\`build.rollupOptions.external\`` diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index f1fbe8e607342e..d4028a6e23962a 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -127,7 +127,11 @@ export async function transformWithEsbuild( sourcefile: filename, ...options, loader, - tsconfigRaw + tsconfigRaw, + // esbuild uses ascii only by default, in which mode Rollup + // hash placeholder chars are escaped. We need to keep these + // placeholders intact for rollup to be able to replace them + charset: 'utf8' } as ESBuildOptions delete resolvedOptions.include diff --git a/packages/vite/src/node/plugins/splitVendorChunk.ts b/packages/vite/src/node/plugins/splitVendorChunk.ts index bc319b01586dab..335a11bd6c3473 100644 --- a/packages/vite/src/node/plugins/splitVendorChunk.ts +++ b/packages/vite/src/node/plugins/splitVendorChunk.ts @@ -1,7 +1,7 @@ import type { GetManualChunk, - GetManualChunkApi, GetModuleInfo, + ManualChunkMeta, OutputOptions } from 'rollup' import type { UserConfig } from '../../node' @@ -106,7 +106,7 @@ export function splitVendorChunkPlugin(): Plugin { if (output.manualChunks) { if (typeof output.manualChunks === 'function') { const userManualChunks = output.manualChunks - output.manualChunks = (id: string, api: GetManualChunkApi) => { + output.manualChunks = (id: string, api: ManualChunkMeta) => { return userManualChunks(id, api) ?? viteManualChunks(id, api) } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8774b7f10651ed..75ff72d09e714d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -12,7 +12,7 @@ importers: specifiers: '@babel/types': ^7.18.10 '@microsoft/api-extractor': ^7.29.3 - '@rollup/plugin-typescript': ^8.3.4 + '@rollup/plugin-typescript': ^8.4.0 '@types/babel__core': ^7.1.19 '@types/babel__standalone': ^7.1.4 '@types/convert-source-map': ^1.5.2 @@ -51,7 +51,7 @@ importers: prettier: 2.7.1 prompts: ^2.4.2 rimraf: ^3.0.2 - rollup: ~2.78.0 + rollup: 3.0.0-4 semver: ^7.3.7 simple-git-hooks: ^2.8.0 tslib: ^2.4.0 @@ -65,7 +65,7 @@ importers: devDependencies: '@babel/types': 7.18.10 '@microsoft/api-extractor': 7.29.3 - '@rollup/plugin-typescript': 8.3.4_7emp2e44zzc74lnyjhc37gdv4y + '@rollup/plugin-typescript': 8.4.0_sz36xez6jscszwfs7o4rnkbjky '@types/babel__core': 7.1.19 '@types/babel__standalone': 7.1.4 '@types/convert-source-map': 1.5.2 @@ -104,7 +104,7 @@ importers: prettier: 2.7.1 prompts: 2.4.2 rimraf: 3.0.2 - rollup: 2.78.0 + rollup: 3.0.0-4 semver: 7.3.7 simple-git-hooks: 2.8.0 tslib: 2.4.0 @@ -173,7 +173,7 @@ importers: '@jridgewell/gen-mapping': ^0.3.2 '@jridgewell/trace-mapping': ^0.3.15 debug: ^4.3.4 - rollup: ~2.78.0 + rollup: 3.0.0-4 slash: ^4.0.0 source-map: ^0.6.1 vite: workspace:* @@ -182,7 +182,7 @@ importers: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.15 debug: 4.3.4 - rollup: 2.78.0 + rollup: 3.0.0-4 slash: 4.0.0 source-map: 0.6.1 vite: link:../vite @@ -214,7 +214,7 @@ importers: '@rollup/plugin-dynamic-import-vars': ^1.4.4 '@rollup/plugin-json': ^4.1.0 '@rollup/plugin-node-resolve': 13.3.0 - '@rollup/plugin-typescript': ^8.3.4 + '@rollup/plugin-typescript': ^8.4.0 '@rollup/pluginutils': ^4.2.1 acorn: ^8.8.0 cac: ^6.7.12 @@ -251,7 +251,7 @@ importers: postcss-modules: ^5.0.0 resolve: ^1.22.1 resolve.exports: ^1.1.0 - rollup: ~2.78.0 + rollup: 3.0.0-4 rollup-plugin-license: ^2.8.1 sirv: ^2.0.2 source-map-js: ^1.0.2 @@ -267,7 +267,7 @@ importers: esbuild: 0.14.47 postcss: 8.4.16 resolve: 1.22.1 - rollup: 2.78.0 + rollup: 3.0.0-4 optionalDependencies: fsevents: 2.3.2 devDependencies: @@ -275,12 +275,12 @@ importers: '@babel/parser': 7.18.11 '@babel/types': 7.18.10 '@jridgewell/trace-mapping': 0.3.15 - '@rollup/plugin-alias': 3.1.9_rollup@2.78.0 - '@rollup/plugin-commonjs': 22.0.2_rollup@2.78.0 - '@rollup/plugin-dynamic-import-vars': 1.4.4_rollup@2.78.0 - '@rollup/plugin-json': 4.1.0_rollup@2.78.0 - '@rollup/plugin-node-resolve': 13.3.0_rollup@2.78.0 - '@rollup/plugin-typescript': 8.3.4_rollup@2.78.0+tslib@2.4.0 + '@rollup/plugin-alias': 3.1.9_rollup@3.0.0-4 + '@rollup/plugin-commonjs': 22.0.2_rollup@3.0.0-4 + '@rollup/plugin-dynamic-import-vars': 1.4.4_rollup@3.0.0-4 + '@rollup/plugin-json': 4.1.0_rollup@3.0.0-4 + '@rollup/plugin-node-resolve': 13.3.0_rollup@3.0.0-4 + '@rollup/plugin-typescript': 8.4.0_rollup@3.0.0-4+tslib@2.4.0 '@rollup/pluginutils': 4.2.1 acorn: 8.8.0 cac: 6.7.12 @@ -313,7 +313,7 @@ importers: postcss-load-config: 4.0.1_postcss@8.4.16 postcss-modules: 5.0.0_postcss@8.4.16 resolve.exports: 1.1.0 - rollup-plugin-license: 2.8.1_rollup@2.78.0 + rollup-plugin-license: 2.8.1_rollup@3.0.0-4 sirv: 2.0.2 source-map-js: 1.0.2 source-map-support: 0.5.21 @@ -2411,6 +2411,16 @@ packages: slash: 3.0.0 dev: true + /@rollup/plugin-alias/3.1.9_rollup@3.0.0-4: + resolution: {integrity: sha512-QI5fsEvm9bDzt32k39wpOwZhVzRcL5ydcffUHMyLVaVaLeC70I8TJZ17F1z1eMoLu4E/UOcH9BWVkKpIKdrfiw==} + engines: {node: '>=8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + rollup: 3.0.0-4 + slash: 3.0.0 + dev: true + /@rollup/plugin-commonjs/22.0.2_rollup@2.78.0: resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} engines: {node: '>= 12.0.0'} @@ -2427,7 +2437,23 @@ packages: rollup: 2.78.0 dev: true - /@rollup/plugin-dynamic-import-vars/1.4.4_rollup@2.78.0: + /@rollup/plugin-commonjs/22.0.2_rollup@3.0.0-4: + resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} + engines: {node: '>= 12.0.0'} + peerDependencies: + rollup: ^2.68.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 7.2.0 + is-reference: 1.2.1 + magic-string: 0.25.9 + resolve: 1.22.1 + rollup: 3.0.0-4 + dev: true + + /@rollup/plugin-dynamic-import-vars/1.4.4_rollup@3.0.0-4: resolution: {integrity: sha512-51BcU6ag9EeF09CtEsa5D/IHYo7KI42TR1Jc4doNzV1nHAiH7TvUi5vsLERFMjs9Gzy9K0otbZH/2wb0hpBhRA==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -2437,7 +2463,7 @@ packages: estree-walker: 2.0.2 fast-glob: 3.2.11 magic-string: 0.25.9 - rollup: 2.78.0 + rollup: 3.0.0-4 dev: true /@rollup/plugin-json/4.1.0_rollup@2.78.0: @@ -2449,6 +2475,15 @@ packages: rollup: 2.78.0 dev: true + /@rollup/plugin-json/4.1.0_rollup@3.0.0-4: + resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} + peerDependencies: + rollup: ^1.20.0 || ^2.0.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + rollup: 3.0.0-4 + dev: true + /@rollup/plugin-node-resolve/13.3.0_rollup@2.78.0: resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} engines: {node: '>= 10.0.0'} @@ -2464,6 +2499,21 @@ packages: rollup: 2.78.0 dev: true + /@rollup/plugin-node-resolve/13.3.0_rollup@3.0.0-4: + resolution: {integrity: sha512-Lus8rbUo1eEcnS4yTFKLZrVumLPY+YayBdWXgFSHYhTT2iJbMhoaaBL3xl5NCdeRytErGr8tZ0L71BMRmnlwSw==} + engines: {node: '>= 10.0.0'} + peerDependencies: + rollup: ^2.42.0 + dependencies: + '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + '@types/resolve': 1.17.1 + deepmerge: 4.2.2 + is-builtin-module: 3.1.0 + is-module: 1.0.0 + resolve: 1.22.1 + rollup: 3.0.0-4 + dev: true + /@rollup/plugin-replace/4.0.0_rollup@2.78.0: resolution: {integrity: sha512-+rumQFiaNac9y64OHtkHGmdjm7us9bo1PlbgQfdihQtuNxzjpaB064HbRnewUOggLQxVCCyINfStkgmBeQpv1g==} peerDependencies: @@ -2474,8 +2524,8 @@ packages: rollup: 2.78.0 dev: true - /@rollup/plugin-typescript/8.3.4_7emp2e44zzc74lnyjhc37gdv4y: - resolution: {integrity: sha512-wt7JnYE9antX6BOXtsxGoeVSu4dZfw0dU3xykfOQ4hC3EddxRbVG/K0xiY1Wup7QOHJcjLYXWAn0Kx9Z1SBHHg==} + /@rollup/plugin-typescript/8.4.0_rollup@3.0.0-4+tslib@2.4.0: + resolution: {integrity: sha512-QssfoOP6V4/6skX12EfOW5UzJAv/c334F4OJWmQpe2kg3agEa0JwVCckwmfuvEgDixyX+XyxjFenH7M2rDKUyQ==} engines: {node: '>=8.0.0'} peerDependencies: rollup: ^2.14.0 @@ -2485,15 +2535,14 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.78.0 + '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 resolve: 1.22.1 - rollup: 2.78.0 + rollup: 3.0.0-4 tslib: 2.4.0 - typescript: 4.6.4 dev: true - /@rollup/plugin-typescript/8.3.4_rollup@2.78.0+tslib@2.4.0: - resolution: {integrity: sha512-wt7JnYE9antX6BOXtsxGoeVSu4dZfw0dU3xykfOQ4hC3EddxRbVG/K0xiY1Wup7QOHJcjLYXWAn0Kx9Z1SBHHg==} + /@rollup/plugin-typescript/8.4.0_sz36xez6jscszwfs7o4rnkbjky: + resolution: {integrity: sha512-QssfoOP6V4/6skX12EfOW5UzJAv/c334F4OJWmQpe2kg3agEa0JwVCckwmfuvEgDixyX+XyxjFenH7M2rDKUyQ==} engines: {node: '>=8.0.0'} peerDependencies: rollup: ^2.14.0 @@ -2503,10 +2552,11 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 3.1.0_rollup@2.78.0 + '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 resolve: 1.22.1 - rollup: 2.78.0 + rollup: 3.0.0-4 tslib: 2.4.0 + typescript: 4.6.4 dev: true /@rollup/pluginutils/3.1.0_rollup@2.78.0: @@ -2521,6 +2571,18 @@ packages: rollup: 2.78.0 dev: true + /@rollup/pluginutils/3.1.0_rollup@3.0.0-4: + resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} + engines: {node: '>= 8.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0 + dependencies: + '@types/estree': 0.0.39 + estree-walker: 1.0.1 + picomatch: 2.3.1 + rollup: 3.0.0-4 + dev: true + /@rollup/pluginutils/4.2.1: resolution: {integrity: sha512-iKnFXr7NkdZAIHiIWE+BX5ULi/ucVFYWD6TbAV+rZctiRTY2PL6tsIKhoIOaoskiWAkgu+VsbXgUVDNLHf+InQ==} engines: {node: '>= 8.0.0'} @@ -7896,7 +7958,7 @@ packages: - supports-color dev: true - /rollup-plugin-license/2.8.1_rollup@2.78.0: + /rollup-plugin-license/2.8.1_rollup@3.0.0-4: resolution: {integrity: sha512-VYd9pzaNL7NN6xQp93XiiCV2UoduXgSmTcz6rl9bHPdiifT6yH3Zw/omEr73Rq8TIyN4nqJACBbKIT/2eE66wg==} engines: {node: '>=10.0.0'} peerDependencies: @@ -7909,7 +7971,7 @@ packages: mkdirp: 1.0.4 moment: 2.29.3 package-name-regex: 2.0.6 - rollup: 2.78.0 + rollup: 3.0.0-4 spdx-expression-validate: 2.0.0 spdx-satisfies: 5.0.1 dev: true @@ -7920,6 +7982,14 @@ packages: hasBin: true optionalDependencies: fsevents: 2.3.2 + dev: true + + /rollup/3.0.0-4: + resolution: {integrity: sha512-xuCcgiZ4/SFGaj5nfHE2kCFflEPFWF2UwEwrwrVrXi8Kxg3+KZES/EL1RQqNac2/dJ8LEpN/d8GCiyXkN3NWjg==} + engines: {node: '>=14.13.1', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.2 /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} From c7213aaf741b01c5df4b679ba41e620102bd50a1 Mon Sep 17 00:00:00 2001 From: patak Date: Thu, 27 Oct 2022 15:32:59 +0200 Subject: [PATCH 2/8] fix: isAsset is no longer a member of OutputAsset --- packages/vite/src/node/plugins/asset.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/asset.ts b/packages/vite/src/node/plugins/asset.ts index a7a8f2554bf0a1..5ed04c77695c77 100644 --- a/packages/vite/src/node/plugins/asset.ts +++ b/packages/vite/src/node/plugins/asset.ts @@ -495,8 +495,7 @@ async function fileToBuiltUrl( name, fileName: map.get(contentHash)!, type: 'asset', - source: content, - isAsset: true + source: content }) } From eebf24e6a77ae51242547ee911517d080fd5f800 Mon Sep 17 00:00:00 2001 From: patak Date: Thu, 27 Oct 2022 23:40:37 +0200 Subject: [PATCH 3/8] chore: update to rollup 3.2 --- package.json | 2 +- packages/plugin-vue/package.json | 2 +- packages/vite/package.json | 2 +- packages/vite/rollup.config.ts | 5 +- packages/vite/src/node/build.ts | 23 +++-- packages/vite/src/node/config.ts | 6 +- packages/vite/src/node/constants.ts | 2 +- packages/vite/src/node/optimizer/scan.ts | 4 +- packages/vite/src/node/plugin.ts | 1 + packages/vite/src/node/plugins/index.ts | 2 +- packages/vite/src/node/server/index.ts | 5 +- .../vite/src/node/server/pluginContainer.ts | 3 + .../vite/src/node/server/transformRequest.ts | 7 +- pnpm-lock.yaml | 93 +++++++------------ scripts/rollupLicensePlugin.mjs | 4 +- 15 files changed, 86 insertions(+), 75 deletions(-) diff --git a/package.json b/package.json index fad74d9489d646..95550a8d164ecc 100644 --- a/package.json +++ b/package.json @@ -79,7 +79,7 @@ "prompts": "^2.4.2", "resolve": "^1.22.1", "rimraf": "^3.0.2", - "rollup": "3.0.0-4", + "rollup": "~3.2.3", "rollup-plugin-license": "^2.8.2", "semver": "^7.3.8", "simple-git-hooks": "^2.8.1", diff --git a/packages/plugin-vue/package.json b/packages/plugin-vue/package.json index fb56a9d44ef727..511d5f9815d01f 100644 --- a/packages/plugin-vue/package.json +++ b/packages/plugin-vue/package.json @@ -42,7 +42,7 @@ "@jridgewell/gen-mapping": "^0.3.2", "@jridgewell/trace-mapping": "^0.3.17", "debug": "^4.3.4", - "rollup": "3.0.0-4", + "rollup": "~3.2.3", "slash": "^5.0.0", "source-map": "^0.6.1", "vite": "workspace:*", diff --git a/packages/vite/package.json b/packages/vite/package.json index cd31c2d0025eb2..f24d53bca19030 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -62,7 +62,7 @@ "esbuild": "^0.15.9", "postcss": "^8.4.18", "resolve": "^1.22.1", - "rollup": "3.0.0-4" + "rollup": "~3.2.3" }, "optionalDependencies": { "fsevents": "~2.3.2" diff --git a/packages/vite/rollup.config.ts b/packages/vite/rollup.config.ts index c333e66577f8d5..397e32c3ec7341 100644 --- a/packages/vite/rollup.config.ts +++ b/packages/vite/rollup.config.ts @@ -1,5 +1,6 @@ /* eslint-disable no-restricted-globals */ import path from 'node:path' +import { fileURLToPath } from 'node:url' import nodeResolve from '@rollup/plugin-node-resolve' import typescript from '@rollup/plugin-typescript' import commonjs from '@rollup/plugin-commonjs' @@ -8,7 +9,9 @@ import MagicString from 'magic-string' import type { Plugin, RollupOptions } from 'rollup' import { defineConfig } from 'rollup' import licensePlugin from '../../scripts/rollupLicensePlugin.mjs' -import pkg from './package.json' +import pkg from './package.json' assert { type: 'json' } + +const __dirname = fileURLToPath(new URL('.', import.meta.url)) const envConfig = defineConfig({ input: path.resolve(__dirname, 'src/client/env.ts'), diff --git a/packages/vite/src/node/build.ts b/packages/vite/src/node/build.ts index 340ec538be801b..d6411280cf160a 100644 --- a/packages/vite/src/node/build.ts +++ b/packages/vite/src/node/build.ts @@ -27,7 +27,13 @@ import { isDepsOptimizerEnabled, resolveConfig } from './config' import { buildReporterPlugin } from './plugins/reporter' import { buildEsbuildPlugin } from './plugins/esbuild' import { terserPlugin } from './plugins/terser' -import { copyDir, emptyDir, lookupFile, normalizePath } from './utils' +import { + asyncFlatten, + copyDir, + emptyDir, + lookupFile, + normalizePath +} from './utils' import { manifestPlugin } from './plugins/manifest' import type { Logger } from './logger' import { dataURIPlugin } from './plugins/dataUri' @@ -377,15 +383,16 @@ export function resolveBuildOptions( return resolved } -export function resolveBuildPlugins(config: ResolvedConfig): { +export async function resolveBuildPlugins(config: ResolvedConfig): Promise<{ pre: Plugin[] post: Plugin[] -} { +}> { const options = config.build const { commonjsOptions } = options const usePluginCommonjs = !Array.isArray(commonjsOptions?.include) || commonjsOptions?.include.length !== 0 + const rollupOptionsPlugins = options.rollupOptions.plugins return { pre: [ completeSystemWrapPlugin(), @@ -393,9 +400,13 @@ export function resolveBuildPlugins(config: ResolvedConfig): { watchPackageDataPlugin(config), ...(usePluginCommonjs ? [commonjsPlugin(options.commonjsOptions)] : []), dataURIPlugin(), - ...(options.rollupOptions.plugins - ? (options.rollupOptions.plugins.filter(Boolean) as Plugin[]) - : []) + ...(( + await asyncFlatten( + Array.isArray(rollupOptionsPlugins) + ? rollupOptionsPlugins + : [rollupOptionsPlugins] + ) + ).filter(Boolean) as Plugin[]) ], post: [ buildImportAnalysisPlugin(config), diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index ea9de372ed5fee..b139bffc064c0c 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -565,7 +565,11 @@ export async function resolveConfig( })) } return ( - await container.resolveId(id, importer, { ssr, scan: options?.scan }) + await container.resolveId(id, importer, { + assertions: {}, + ssr, + scan: options?.scan + }) )?.id } } diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts index 35bf9231909850..38d83a40287dba 100644 --- a/packages/vite/src/node/constants.ts +++ b/packages/vite/src/node/constants.ts @@ -1,7 +1,7 @@ import path, { resolve } from 'node:path' import { fileURLToPath } from 'node:url' // @ts-expect-error -import { version } from '../../package.json' +import { version } from '../../package.json' assert { type: 'json' } export const VERSION = version as string diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index e600e7ff69f96f..c2476fc81ffc73 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -179,7 +179,7 @@ function esbuildScanPlugin( id, importer && normalizePath(importer), { - ...options, + ...(options ?? { assertions: {} }), scan: true } ) @@ -388,6 +388,7 @@ function esbuildScanPlugin( return externalUnlessEntry({ path: id }) } const resolved = await resolve(id, importer, { + assertions: {}, // TODO: forward assertions custom: { depScan: { loader: pluginData?.htmlType?.loader } } @@ -456,6 +457,7 @@ function esbuildScanPlugin( async ({ path: id, importer, pluginData }) => { // use vite resolver to support urls and omitted extensions const resolved = await resolve(id, importer, { + assertions: {}, // TODO: forward assertions custom: { depScan: { loader: pluginData?.htmlType?.loader } } diff --git a/packages/vite/src/node/plugin.ts b/packages/vite/src/node/plugin.ts index b01cf6bda13be8..53c64c24ca1db9 100644 --- a/packages/vite/src/node/plugin.ts +++ b/packages/vite/src/node/plugin.ts @@ -146,6 +146,7 @@ export interface Plugin extends RollupPlugin { source: string, importer: string | undefined, options: { + assertions: Record custom?: CustomPluginOptions ssr?: boolean /** diff --git a/packages/vite/src/node/plugins/index.ts b/packages/vite/src/node/plugins/index.ts index 239f337704844c..057f4f1faa5271 100644 --- a/packages/vite/src/node/plugins/index.ts +++ b/packages/vite/src/node/plugins/index.ts @@ -35,7 +35,7 @@ export async function resolvePlugins( const isBuild = config.command === 'build' const isWatch = isBuild && !!config.build.watch const buildPlugins = isBuild - ? (await import('../build')).resolveBuildPlugins(config) + ? await (await import('../build')).resolveBuildPlugins(config) : { pre: [], post: [] } const { modulePreload } = config.build diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index 5e8296e5ad3aad..468e04c7de5c12 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -337,7 +337,10 @@ export async function createServer( ) as FSWatcher const moduleGraph: ModuleGraph = new ModuleGraph((url, ssr) => - container.resolveId(url, undefined, { ssr }) + container.resolveId(url, undefined, { + assertions: {}, // TODO: forward assertions + ssr + }) ) const container = await createPluginContainer(config, moduleGraph, watcher) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index f44efd1fcd26b7..9a49ccbbc5e6a4 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -96,6 +96,7 @@ export interface PluginContainer { id: string, importer?: string, options?: { + assertions: Record custom?: CustomPluginOptions skip?: Set ssr?: boolean @@ -306,6 +307,7 @@ export async function createPluginContainer( skip.add(this._activePlugin) } let out = await container.resolveId(id, importer, { + assertions: {}, // TODO: forward import assertions custom: options?.custom, isEntry: !!options?.isEntry, skip, @@ -583,6 +585,7 @@ export async function createPluginContainer( ? plugin.resolveId.handler : plugin.resolveId const result = await handler.call(ctx as any, rawId, importer, { + assertions: {}, // TODO: forward import assertions custom: options?.custom, isEntry: !!options?.isEntry, ssr, diff --git a/packages/vite/src/node/server/transformRequest.ts b/packages/vite/src/node/server/transformRequest.ts index 8f962c250f22d9..0252650ba86824 100644 --- a/packages/vite/src/node/server/transformRequest.ts +++ b/packages/vite/src/node/server/transformRequest.ts @@ -140,7 +140,12 @@ async function doTransform( // resolve const id = - (await pluginContainer.resolveId(url, undefined, { ssr }))?.id || url + ( + await pluginContainer.resolveId(url, undefined, { + assertions: {}, // TODO: forward assertions + ssr + }) + )?.id || url const result = loadAndTransform(id, url, server, options, timestamp) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a20f4f1a4aca31..ed1ae8df9cd0cc 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -53,7 +53,7 @@ importers: prompts: ^2.4.2 resolve: ^1.22.1 rimraf: ^3.0.2 - rollup: 3.0.0-4 + rollup: ~3.2.3 rollup-plugin-license: ^2.8.2 semver: ^7.3.8 simple-git-hooks: ^2.8.1 @@ -68,7 +68,7 @@ importers: devDependencies: '@babel/types': 7.19.4 '@microsoft/api-extractor': 7.33.4 - '@rollup/plugin-typescript': 8.5.0_sz36xez6jscszwfs7o4rnkbjky + '@rollup/plugin-typescript': 8.5.0_hpj6ac2w2wubuhu2vpqucymlsi '@types/babel__core': 7.1.19 '@types/babel__standalone': 7.1.4 '@types/convert-source-map': 1.5.2 @@ -109,8 +109,8 @@ importers: prompts: 2.4.2 resolve: 1.22.1 rimraf: 3.0.2 - rollup: 3.0.0-4 - rollup-plugin-license: 2.8.2_rollup@3.0.0-4 + rollup: 3.2.3 + rollup-plugin-license: 2.8.2_rollup@3.2.3 semver: 7.3.8 simple-git-hooks: 2.8.1 tslib: 2.4.0 @@ -181,7 +181,7 @@ importers: '@jridgewell/gen-mapping': ^0.3.2 '@jridgewell/trace-mapping': ^0.3.17 debug: ^4.3.4 - rollup: 3.0.0-4 + rollup: ~3.2.3 slash: ^5.0.0 source-map: ^0.6.1 vite: workspace:* @@ -190,7 +190,7 @@ importers: '@jridgewell/gen-mapping': 0.3.2 '@jridgewell/trace-mapping': 0.3.17 debug: 4.3.4 - rollup: 3.0.0-4 + rollup: 3.2.3 slash: 5.0.0 source-map: 0.6.1 vite: link:../vite @@ -260,7 +260,7 @@ importers: postcss-modules: ^5.0.0 resolve: ^1.22.1 resolve.exports: ^1.1.0 - rollup: 3.0.0-4 + rollup: ~3.2.3 sirv: ^2.0.2 source-map-js: ^1.0.2 source-map-support: ^0.5.21 @@ -275,7 +275,7 @@ importers: esbuild: 0.15.9 postcss: 8.4.18 resolve: 1.22.1 - rollup: 3.0.0-4 + rollup: 3.2.3 optionalDependencies: fsevents: 2.3.2 devDependencies: @@ -283,12 +283,12 @@ importers: '@babel/parser': 7.19.6 '@babel/types': 7.19.4 '@jridgewell/trace-mapping': 0.3.17 - '@rollup/plugin-alias': 4.0.2_rollup@3.0.0-4 - '@rollup/plugin-commonjs': 22.0.2_rollup@3.0.0-4 - '@rollup/plugin-dynamic-import-vars': 1.4.4_rollup@3.0.0-4 - '@rollup/plugin-json': 4.1.0_rollup@3.0.0-4 - '@rollup/plugin-node-resolve': 14.1.0_rollup@3.0.0-4 - '@rollup/plugin-typescript': 8.5.0_rollup@3.0.0-4+tslib@2.4.0 + '@rollup/plugin-alias': 4.0.2_rollup@3.2.3 + '@rollup/plugin-commonjs': 22.0.2_rollup@3.2.3 + '@rollup/plugin-dynamic-import-vars': 1.4.4_rollup@3.2.3 + '@rollup/plugin-json': 4.1.0_rollup@3.2.3 + '@rollup/plugin-node-resolve': 14.1.0_rollup@3.2.3 + '@rollup/plugin-typescript': 8.5.0_rollup@3.2.3+tslib@2.4.0 '@rollup/pluginutils': 4.2.1 acorn: 8.8.1 cac: 6.7.14 @@ -2247,19 +2247,6 @@ packages: engines: {node: '>=14'} dev: false - /@rollup/plugin-alias/4.0.2_rollup@3.0.0-4: - resolution: {integrity: sha512-1hv7dBOZZwo3SEupxn4UA2N0EDThqSSS+wI1St1TNTBtOZvUchyIClyHcnDcjjrReTPZ47Faedrhblv4n+T5UQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - rollup: 3.0.0-4 - slash: 4.0.0 - dev: true - /@rollup/plugin-alias/4.0.2_rollup@3.2.3: resolution: {integrity: sha512-1hv7dBOZZwo3SEupxn4UA2N0EDThqSSS+wI1St1TNTBtOZvUchyIClyHcnDcjjrReTPZ47Faedrhblv4n+T5UQ==} engines: {node: '>=14.0.0'} @@ -2273,20 +2260,20 @@ packages: slash: 4.0.0 dev: true - /@rollup/plugin-commonjs/22.0.2_rollup@3.0.0-4: + /@rollup/plugin-commonjs/22.0.2_rollup@3.2.3: resolution: {integrity: sha512-//NdP6iIwPbMTcazYsiBMbJW7gfmpHom33u1beiIoHDEM0Q9clvtQB1T0efvMqHeKsGohiHo97BCPCkBXdscwg==} engines: {node: '>= 12.0.0'} peerDependencies: rollup: ^2.68.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + '@rollup/pluginutils': 3.1.0_rollup@3.2.3 commondir: 1.0.1 estree-walker: 2.0.2 glob: 7.2.0 is-reference: 1.2.1 magic-string: 0.25.9 resolve: 1.22.1 - rollup: 3.0.0-4 + rollup: 3.2.3 dev: true /@rollup/plugin-commonjs/23.0.0_rollup@3.2.3: @@ -2307,7 +2294,7 @@ packages: rollup: 3.2.3 dev: true - /@rollup/plugin-dynamic-import-vars/1.4.4_rollup@3.0.0-4: + /@rollup/plugin-dynamic-import-vars/1.4.4_rollup@3.2.3: resolution: {integrity: sha512-51BcU6ag9EeF09CtEsa5D/IHYo7KI42TR1Jc4doNzV1nHAiH7TvUi5vsLERFMjs9Gzy9K0otbZH/2wb0hpBhRA==} engines: {node: '>= 10.0.0'} peerDependencies: @@ -2317,16 +2304,16 @@ packages: estree-walker: 2.0.2 fast-glob: 3.2.12 magic-string: 0.25.9 - rollup: 3.0.0-4 + rollup: 3.2.3 dev: true - /@rollup/plugin-json/4.1.0_rollup@3.0.0-4: + /@rollup/plugin-json/4.1.0_rollup@3.2.3: resolution: {integrity: sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==} peerDependencies: rollup: ^1.20.0 || ^2.0.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 - rollup: 3.0.0-4 + '@rollup/pluginutils': 3.1.0_rollup@3.2.3 + rollup: 3.2.3 dev: true /@rollup/plugin-json/5.0.0_rollup@3.2.3: @@ -2342,19 +2329,19 @@ packages: rollup: 3.2.3 dev: true - /@rollup/plugin-node-resolve/14.1.0_rollup@3.0.0-4: + /@rollup/plugin-node-resolve/14.1.0_rollup@3.2.3: resolution: {integrity: sha512-5G2niJroNCz/1zqwXtk0t9+twOSDlG00k1Wfd7bkbbXmwg8H8dvgHdIWAun53Ps/rckfvOC7scDBjuGFg5OaWw==} engines: {node: '>= 10.0.0'} peerDependencies: rollup: ^2.78.0 dependencies: - '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + '@rollup/pluginutils': 3.1.0_rollup@3.2.3 '@types/resolve': 1.17.1 deepmerge: 4.2.2 is-builtin-module: 3.1.0 is-module: 1.0.0 resolve: 1.22.1 - rollup: 3.0.0-4 + rollup: 3.2.3 dev: true /@rollup/plugin-node-resolve/15.0.0_rollup@3.2.3: @@ -2389,7 +2376,7 @@ packages: rollup: 3.2.3 dev: true - /@rollup/plugin-typescript/8.5.0_rollup@3.0.0-4+tslib@2.4.0: + /@rollup/plugin-typescript/8.5.0_hpj6ac2w2wubuhu2vpqucymlsi: resolution: {integrity: sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==} engines: {node: '>=8.0.0'} peerDependencies: @@ -2400,13 +2387,14 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + '@rollup/pluginutils': 3.1.0_rollup@3.2.3 resolve: 1.22.1 - rollup: 3.0.0-4 + rollup: 3.2.3 tslib: 2.4.0 + typescript: 4.6.4 dev: true - /@rollup/plugin-typescript/8.5.0_sz36xez6jscszwfs7o4rnkbjky: + /@rollup/plugin-typescript/8.5.0_rollup@3.2.3+tslib@2.4.0: resolution: {integrity: sha512-wMv1/scv0m/rXx21wD2IsBbJFba8wGF3ErJIr6IKRfRj49S85Lszbxb4DCo8iILpluTjk2GAAu9CoZt4G3ppgQ==} engines: {node: '>=8.0.0'} peerDependencies: @@ -2417,14 +2405,13 @@ packages: tslib: optional: true dependencies: - '@rollup/pluginutils': 3.1.0_rollup@3.0.0-4 + '@rollup/pluginutils': 3.1.0_rollup@3.2.3 resolve: 1.22.1 - rollup: 3.0.0-4 + rollup: 3.2.3 tslib: 2.4.0 - typescript: 4.6.4 dev: true - /@rollup/pluginutils/3.1.0_rollup@3.0.0-4: + /@rollup/pluginutils/3.1.0_rollup@3.2.3: resolution: {integrity: sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==} engines: {node: '>= 8.0.0'} peerDependencies: @@ -2433,7 +2420,7 @@ packages: '@types/estree': 0.0.39 estree-walker: 1.0.1 picomatch: 2.3.1 - rollup: 3.0.0-4 + rollup: 3.2.3 dev: true /@rollup/pluginutils/4.2.1: @@ -8045,7 +8032,7 @@ packages: '@babel/code-frame': 7.18.6 dev: true - /rollup-plugin-license/2.8.2_rollup@3.0.0-4: + /rollup-plugin-license/2.8.2_rollup@3.2.3: resolution: {integrity: sha512-jv268aj71J0Ee6+isjy1mYD2LlwuNg6aUiSdgly0PS0fQ2+vsuc+PLx1ueSk2/QKfjk5OJzcGPEDMHyoIeAFCw==} engines: {node: '>=10.0.0'} peerDependencies: @@ -8058,25 +8045,17 @@ packages: mkdirp: 1.0.4 moment: 2.29.3 package-name-regex: 2.0.6 - rollup: 3.0.0-4 + rollup: 3.2.3 spdx-expression-validate: 2.0.0 spdx-satisfies: 5.0.1 dev: true - /rollup/3.0.0-4: - resolution: {integrity: sha512-xuCcgiZ4/SFGaj5nfHE2kCFflEPFWF2UwEwrwrVrXi8Kxg3+KZES/EL1RQqNac2/dJ8LEpN/d8GCiyXkN3NWjg==} - engines: {node: '>=14.13.1', npm: '>=8.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - /rollup/3.2.3: resolution: {integrity: sha512-qfadtkY5kl0F5e4dXVdj2D+GtOdifasXHFMiL1SMf9ADQDv5Eti6xReef9FKj+iQPR2pvtqWna57s/PjARY4fg==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: fsevents: 2.3.2 - dev: true /run-parallel/1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} diff --git a/scripts/rollupLicensePlugin.mjs b/scripts/rollupLicensePlugin.mjs index f96719e19bf9a6..1a3e242eae0160 100644 --- a/scripts/rollupLicensePlugin.mjs +++ b/scripts/rollupLicensePlugin.mjs @@ -5,7 +5,7 @@ import path from 'node:path' import license from 'rollup-plugin-license' import colors from 'picocolors' import fg from 'fast-glob' -import { sync as resolve } from 'resolve' +import resolve from 'resolve' /** * @param {string} licenseFilePath @@ -73,7 +73,7 @@ function licensePlugin(licenseFilePath, licenseTitle, packageName) { if (!licenseText && name) { try { const pkgDir = path.dirname( - resolve(path.join(name, 'package.json'), { + resolve.sync(path.join(name, 'package.json'), { preserveSymlinks: false }) ) From fa9426b85435f489a120e846f1cb5a7734f5537a Mon Sep 17 00:00:00 2001 From: patak Date: Thu, 27 Oct 2022 23:43:39 +0200 Subject: [PATCH 4/8] chore: revert forcing utf8 for esbuild --- packages/vite/src/node/plugins/esbuild.ts | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 19528d92eefe68..cb1899eabc5e1c 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -133,11 +133,7 @@ export async function transformWithEsbuild( sourcefile: filename, ...options, loader, - tsconfigRaw, - // esbuild uses ascii only by default, in which mode Rollup - // hash placeholder chars are escaped. We need to keep these - // placeholders intact for rollup to be able to replace them - charset: 'utf8' + tsconfigRaw } as ESBuildOptions delete resolvedOptions.include From 2584cf660375fd5d91981bca197b3b6500b23be4 Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 28 Oct 2022 00:21:25 +0200 Subject: [PATCH 5/8] chore: linting --- packages/vite/rollup.config.ts | 1 - playground/vitestSetup.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/vite/rollup.config.ts b/packages/vite/rollup.config.ts index 397e32c3ec7341..c8afe4350bec95 100644 --- a/packages/vite/rollup.config.ts +++ b/packages/vite/rollup.config.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-restricted-globals */ import path from 'node:path' import { fileURLToPath } from 'node:url' import nodeResolve from '@rollup/plugin-node-resolve' diff --git a/playground/vitestSetup.ts b/playground/vitestSetup.ts index cf476a87100c20..e768f898caf58e 100644 --- a/playground/vitestSetup.ts +++ b/playground/vitestSetup.ts @@ -306,7 +306,7 @@ export async function notifyRebuildComplete( await new Promise((resolve) => { resolveFn = resolve }) - return watcher.removeListener('event', callback) + return watcher.off('event', callback) } function createInMemoryLogger(logs: string[]): Logger { From 1a389ca03588149871fe14cbc14ec1d967b0cc1a Mon Sep 17 00:00:00 2001 From: patak Date: Fri, 28 Oct 2022 01:25:43 +0200 Subject: [PATCH 6/8] fix: node 14 --- packages/vite/rollup.config.ts | 6 +++++- packages/vite/src/node/constants.ts | 7 +++++-- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/packages/vite/rollup.config.ts b/packages/vite/rollup.config.ts index c8afe4350bec95..e25beca7b2fd6e 100644 --- a/packages/vite/rollup.config.ts +++ b/packages/vite/rollup.config.ts @@ -1,3 +1,4 @@ +import { readFileSync } from 'node:fs' import path from 'node:path' import { fileURLToPath } from 'node:url' import nodeResolve from '@rollup/plugin-node-resolve' @@ -8,7 +9,10 @@ import MagicString from 'magic-string' import type { Plugin, RollupOptions } from 'rollup' import { defineConfig } from 'rollup' import licensePlugin from '../../scripts/rollupLicensePlugin.mjs' -import pkg from './package.json' assert { type: 'json' } + +const pkg = JSON.parse( + readFileSync(new URL('./package.json', import.meta.url)).toString() +) const __dirname = fileURLToPath(new URL('.', import.meta.url)) diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts index 38d83a40287dba..e091afcebc928b 100644 --- a/packages/vite/src/node/constants.ts +++ b/packages/vite/src/node/constants.ts @@ -1,7 +1,10 @@ import path, { resolve } from 'node:path' import { fileURLToPath } from 'node:url' -// @ts-expect-error -import { version } from '../../package.json' assert { type: 'json' } +import { readFileSync } from 'node:fs' + +const { version } = JSON.parse( + readFileSync(new URL('../../package.json', import.meta.url)).toString() +) export const VERSION = version as string From cfa0e3827246afdef3d0c13f22502d8c00963dd4 Mon Sep 17 00:00:00 2001 From: bluwy Date: Wed, 2 Nov 2022 17:43:32 +0800 Subject: [PATCH 7/8] fix: handle pure css chunks --- packages/vite/src/node/plugins/css.ts | 30 +++++++++++++++++++++------ packages/vite/src/node/utils.ts | 9 ++++++++ 2 files changed, 33 insertions(+), 6 deletions(-) diff --git a/packages/vite/src/node/plugins/css.ts b/packages/vite/src/node/plugins/css.ts index ad46e5ba738f37..c564399ab8f57c 100644 --- a/packages/vite/src/node/plugins/css.ts +++ b/packages/vite/src/node/plugins/css.ts @@ -30,6 +30,7 @@ import { CLIENT_PUBLIC_PATH, SPECIAL_QUERY_RE } from '../constants' import type { ResolvedConfig } from '../config' import type { Plugin } from '../plugin' import { + arrayEqual, asyncReplace, cleanUrl, combineSourcemaps, @@ -305,7 +306,7 @@ export function cssPlugin(config: ResolvedConfig): Plugin { export function cssPostPlugin(config: ResolvedConfig): Plugin { // styles initialization in buildStart causes a styling loss in watch const styles: Map = new Map() - let pureCssChunks: Set + let pureCssChunks: Set // when there are multiple rollup outputs and extracting CSS, only emit once, // since output formats have no effect on the generated CSS. @@ -339,7 +340,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { buildStart() { // Ensure new caches for every build (i.e. rebuilding in watch mode) - pureCssChunks = new Set() + pureCssChunks = new Set() outputToExtractedCSSMap = new Map() hasEmitted = false }, @@ -537,7 +538,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { if (config.build.cssCodeSplit) { if (isPureCssChunk) { // this is a shared CSS-only chunk that is empty. - pureCssChunks.add(chunk.fileName) + pureCssChunks.add(chunk) } if (opts.format === 'es' || opts.format === 'cjs') { const cssAssetName = chunk.facadeModuleId @@ -624,7 +625,24 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { // remove empty css chunks and their imports if (pureCssChunks.size) { - const emptyChunkFiles = [...pureCssChunks] + // map each pure css chunk (rendered chunk) to it's corresponding bundle + // chunk. we check that by comparing the `moduleIds` as they have different + // filenames (rendered chunk has the !~{XXX}~ placeholder) + const pureCssChunkNames: string[] = [] + for (const pureCssChunk of pureCssChunks) { + for (const key in bundle) { + const bundleChunk = bundle[key] + if ( + bundleChunk.type === 'chunk' && + arrayEqual(bundleChunk.moduleIds, pureCssChunk.moduleIds) + ) { + pureCssChunkNames.push(key) + break + } + } + } + + const emptyChunkFiles = pureCssChunkNames .map((file) => path.basename(file)) .join('|') .replace(/\./g, '\\.') @@ -641,7 +659,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { // and also register the emitted CSS files under the importer // chunks instead. chunk.imports = chunk.imports.filter((file) => { - if (pureCssChunks.has(file)) { + if (pureCssChunkNames.includes(file)) { const { viteMetadata: { importedCss } } = bundle[file] as OutputChunk @@ -660,7 +678,7 @@ export function cssPostPlugin(config: ResolvedConfig): Plugin { } } const removedPureCssFiles = removedPureCssFilesCache.get(config)! - pureCssChunks.forEach((fileName) => { + pureCssChunkNames.forEach((fileName) => { removedPureCssFiles.set(fileName, bundle[fileName] as RenderedChunk) delete bundle[fileName] }) diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index d307b5089b9d45..e1a1aac121454d 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -1204,3 +1204,12 @@ export function joinUrlSegments(a: string, b: string): string { } return a + b } + +export function arrayEqual(a: any[], b: any[]): boolean { + if (a === b) return true + if (a.length !== b.length) return false + for (let i = 0; i < a.length; i++) { + if (a[i] !== b[i]) return false + } + return true +} From 61f8f7e4cb5f22c092d5197efd2a94a8ab61a285 Mon Sep 17 00:00:00 2001 From: bluwy Date: Sun, 6 Nov 2022 13:20:16 +0800 Subject: [PATCH 8/8] fix: make assertions optional --- packages/vite/src/node/config.ts | 1 - packages/vite/src/node/optimizer/scan.ts | 4 +--- packages/vite/src/node/server/index.ts | 5 +---- packages/vite/src/node/server/pluginContainer.ts | 7 ++++--- packages/vite/src/node/server/transformRequest.ts | 7 +------ 5 files changed, 7 insertions(+), 17 deletions(-) diff --git a/packages/vite/src/node/config.ts b/packages/vite/src/node/config.ts index 95522e3c044385..ca87709cca3627 100644 --- a/packages/vite/src/node/config.ts +++ b/packages/vite/src/node/config.ts @@ -570,7 +570,6 @@ export async function resolveConfig( } return ( await container.resolveId(id, importer, { - assertions: {}, ssr, scan: options?.scan }) diff --git a/packages/vite/src/node/optimizer/scan.ts b/packages/vite/src/node/optimizer/scan.ts index 9723b082ac42ee..7764705d76694c 100644 --- a/packages/vite/src/node/optimizer/scan.ts +++ b/packages/vite/src/node/optimizer/scan.ts @@ -179,7 +179,7 @@ function esbuildScanPlugin( id, importer && normalizePath(importer), { - ...(options ?? { assertions: {} }), + ...options, scan: true } ) @@ -394,7 +394,6 @@ function esbuildScanPlugin( return externalUnlessEntry({ path: id }) } const resolved = await resolve(id, importer, { - assertions: {}, // TODO: forward assertions custom: { depScan: { loader: pluginData?.htmlType?.loader } } @@ -463,7 +462,6 @@ function esbuildScanPlugin( async ({ path: id, importer, pluginData }) => { // use vite resolver to support urls and omitted extensions const resolved = await resolve(id, importer, { - assertions: {}, // TODO: forward assertions custom: { depScan: { loader: pluginData?.htmlType?.loader } } diff --git a/packages/vite/src/node/server/index.ts b/packages/vite/src/node/server/index.ts index eb1760867ac30d..7ea1d846183bb5 100644 --- a/packages/vite/src/node/server/index.ts +++ b/packages/vite/src/node/server/index.ts @@ -337,10 +337,7 @@ export async function createServer( ) as FSWatcher const moduleGraph: ModuleGraph = new ModuleGraph((url, ssr) => - container.resolveId(url, undefined, { - assertions: {}, // TODO: forward assertions - ssr - }) + container.resolveId(url, undefined, { ssr }) ) const container = await createPluginContainer(config, moduleGraph, watcher) diff --git a/packages/vite/src/node/server/pluginContainer.ts b/packages/vite/src/node/server/pluginContainer.ts index 169304db50a644..ee333541105cbb 100644 --- a/packages/vite/src/node/server/pluginContainer.ts +++ b/packages/vite/src/node/server/pluginContainer.ts @@ -96,7 +96,7 @@ export interface PluginContainer { id: string, importer?: string, options?: { - assertions: Record + assertions?: Record custom?: CustomPluginOptions skip?: Set ssr?: boolean @@ -296,6 +296,7 @@ export async function createPluginContainer( id: string, importer?: string, options?: { + assertions?: Record custom?: CustomPluginOptions isEntry?: boolean skipSelf?: boolean @@ -307,7 +308,7 @@ export async function createPluginContainer( skip.add(this._activePlugin) } let out = await container.resolveId(id, importer, { - assertions: {}, // TODO: forward import assertions + assertions: options?.assertions, custom: options?.custom, isEntry: !!options?.isEntry, skip, @@ -589,7 +590,7 @@ export async function createPluginContainer( ? plugin.resolveId.handler : plugin.resolveId const result = await handler.call(ctx as any, rawId, importer, { - assertions: {}, // TODO: forward import assertions + assertions: options?.assertions ?? {}, custom: options?.custom, isEntry: !!options?.isEntry, ssr, diff --git a/packages/vite/src/node/server/transformRequest.ts b/packages/vite/src/node/server/transformRequest.ts index fe831b5c771ad3..f2b78516e63670 100644 --- a/packages/vite/src/node/server/transformRequest.ts +++ b/packages/vite/src/node/server/transformRequest.ts @@ -141,12 +141,7 @@ async function doTransform( // resolve const id = - ( - await pluginContainer.resolveId(url, undefined, { - assertions: {}, // TODO: forward assertions - ssr - }) - )?.id || url + (await pluginContainer.resolveId(url, undefined, { ssr }))?.id || url const result = loadAndTransform(id, url, server, options, timestamp)