From f184c8032bec6e668265a98d254a442e1024b6f3 Mon Sep 17 00:00:00 2001 From: Hiroshi Ogawa Date: Fri, 22 Mar 2024 21:34:28 +0900 Subject: [PATCH] fix(optimizer): fix `optimizeDeps.include` glob syntax for `./*` exports (#16230) --- packages/vite/src/node/optimizer/resolve.ts | 10 ++++++++++ .../optimize-deps/__tests__/optimize-deps.spec.ts | 4 ++++ .../dep-optimize-exports-with-root-glob/dir/file2.js | 0 .../dep-optimize-exports-with-root-glob/file1.js | 0 .../dep-optimize-exports-with-root-glob/index.js | 0 .../dep-optimize-exports-with-root-glob/package.json | 10 ++++++++++ playground/optimize-deps/package.json | 1 + playground/optimize-deps/vite.config.js | 1 + pnpm-lock.yaml | 10 ++++++++++ 9 files changed, 36 insertions(+) create mode 100644 playground/optimize-deps/dep-optimize-exports-with-root-glob/dir/file2.js create mode 100644 playground/optimize-deps/dep-optimize-exports-with-root-glob/file1.js create mode 100644 playground/optimize-deps/dep-optimize-exports-with-root-glob/index.js create mode 100644 playground/optimize-deps/dep-optimize-exports-with-root-glob/package.json diff --git a/packages/vite/src/node/optimizer/resolve.ts b/packages/vite/src/node/optimizer/resolve.ts index aee532896a18d3..b76634dd8ae8cf 100644 --- a/packages/vite/src/node/optimizer/resolve.ts +++ b/packages/vite/src/node/optimizer/resolve.ts @@ -95,6 +95,16 @@ export function expandGlobIds(id: string, config: ResolvedConfig): string[] { ignore: ['node_modules'], }) .map((filePath) => { + // ensure "./" prefix for inconsistent fast-glob result + // glob.sync("./some-dir/**/*") -> "./some-dir/some-file" + // glob.sync("./**/*") -> "some-dir/some-file" + if ( + exportsValue.startsWith('./') && + !filePath.startsWith('./') + ) { + filePath = './' + filePath + } + // "./glob/*": "./dist/glob/*-browser/*.js" // `filePath`: "./dist/glob/foo-browser/foo.js" // we need to revert the file path back to the export key by diff --git a/playground/optimize-deps/__tests__/optimize-deps.spec.ts b/playground/optimize-deps/__tests__/optimize-deps.spec.ts index b07e5f8fe59a2a..ee691fddc4c686 100644 --- a/playground/optimize-deps/__tests__/optimize-deps.spec.ts +++ b/playground/optimize-deps/__tests__/optimize-deps.spec.ts @@ -304,6 +304,10 @@ describe.runIf(isServe)('optimizeDeps config', () => { '@vitejs/test-dep-optimize-exports-with-glob/glob-dir/foo', '@vitejs/test-dep-optimize-exports-with-glob/glob-dir/bar', '@vitejs/test-dep-optimize-exports-with-glob/glob-dir/nested/baz', + '@vitejs/test-dep-optimize-exports-with-root-glob', + '@vitejs/test-dep-optimize-exports-with-root-glob/file1.js', + '@vitejs/test-dep-optimize-exports-with-root-glob/index.js', + '@vitejs/test-dep-optimize-exports-with-root-glob/dir/file2.js', '@vitejs/test-dep-optimize-with-glob', '@vitejs/test-dep-optimize-with-glob/index.js', '@vitejs/test-dep-optimize-with-glob/named.js', diff --git a/playground/optimize-deps/dep-optimize-exports-with-root-glob/dir/file2.js b/playground/optimize-deps/dep-optimize-exports-with-root-glob/dir/file2.js new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/playground/optimize-deps/dep-optimize-exports-with-root-glob/file1.js b/playground/optimize-deps/dep-optimize-exports-with-root-glob/file1.js new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/playground/optimize-deps/dep-optimize-exports-with-root-glob/index.js b/playground/optimize-deps/dep-optimize-exports-with-root-glob/index.js new file mode 100644 index 00000000000000..e69de29bb2d1d6 diff --git a/playground/optimize-deps/dep-optimize-exports-with-root-glob/package.json b/playground/optimize-deps/dep-optimize-exports-with-root-glob/package.json new file mode 100644 index 00000000000000..4594a7bbcc4cf7 --- /dev/null +++ b/playground/optimize-deps/dep-optimize-exports-with-root-glob/package.json @@ -0,0 +1,10 @@ +{ + "name": "@vitejs/test-dep-optimize-exports-with-root-glob", + "private": true, + "version": "1.0.0", + "type": "module", + "exports": { + ".": "./index.js", + "./*": "./*" + } +} diff --git a/playground/optimize-deps/package.json b/playground/optimize-deps/package.json index 1f64f6af5c587e..e5f8d8a22dfcef 100644 --- a/playground/optimize-deps/package.json +++ b/playground/optimize-deps/package.json @@ -26,6 +26,7 @@ "@vitejs/test-dep-node-env": "file:./dep-node-env", "@vitejs/test-dep-not-js": "file:./dep-not-js", "@vitejs/test-dep-optimize-exports-with-glob": "file:./dep-optimize-exports-with-glob", + "@vitejs/test-dep-optimize-exports-with-root-glob": "file:./dep-optimize-exports-with-root-glob", "@vitejs/test-dep-optimize-with-glob": "file:./dep-optimize-with-glob", "@vitejs/test-dep-relative-to-main": "file:./dep-relative-to-main", "@vitejs/test-dep-with-builtin-module-cjs": "file:./dep-with-builtin-module-cjs", diff --git a/playground/optimize-deps/vite.config.js b/playground/optimize-deps/vite.config.js index cced96a66e94d5..a2c2fdf3c6d5e7 100644 --- a/playground/optimize-deps/vite.config.js +++ b/playground/optimize-deps/vite.config.js @@ -20,6 +20,7 @@ export default defineConfig({ // will throw if optimized (should log warning instead) '@vitejs/test-non-optimizable-include', '@vitejs/test-dep-optimize-exports-with-glob/**/*', + '@vitejs/test-dep-optimize-exports-with-root-glob/**/*.js', '@vitejs/test-dep-optimize-with-glob/**/*.js', ], exclude: ['@vitejs/test-nested-exclude', '@vitejs/test-dep-non-optimized'], diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9dd16c491ca257..1bdb5276b02cae 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -936,6 +936,9 @@ importers: '@vitejs/test-dep-optimize-exports-with-glob': specifier: file:./dep-optimize-exports-with-glob version: file:playground/optimize-deps/dep-optimize-exports-with-glob + '@vitejs/test-dep-optimize-exports-with-root-glob': + specifier: file:./dep-optimize-exports-with-root-glob + version: file:playground/optimize-deps/dep-optimize-exports-with-root-glob '@vitejs/test-dep-optimize-with-glob': specifier: file:./dep-optimize-with-glob version: file:playground/optimize-deps/dep-optimize-with-glob @@ -1053,6 +1056,8 @@ importers: playground/optimize-deps/dep-optimize-exports-with-glob: {} + playground/optimize-deps/dep-optimize-exports-with-root-glob: {} + playground/optimize-deps/dep-optimize-with-glob: {} playground/optimize-deps/dep-relative-to-main: {} @@ -10586,6 +10591,11 @@ packages: name: '@vitejs/test-dep-optimize-exports-with-glob' dev: false + file:playground/optimize-deps/dep-optimize-exports-with-root-glob: + resolution: {directory: playground/optimize-deps/dep-optimize-exports-with-root-glob, type: directory} + name: '@vitejs/test-dep-optimize-exports-with-root-glob' + dev: false + file:playground/optimize-deps/dep-optimize-with-glob: resolution: {directory: playground/optimize-deps/dep-optimize-with-glob, type: directory} name: '@vitejs/test-dep-optimize-with-glob'