From 7e280f27de19daa5b336029a8320a766c85a6d31 Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Thu, 7 Jul 2022 16:38:42 +0800 Subject: [PATCH 1/7] perf: transform `#imports` to improve tree-shaking --- packages/kit/package.json | 2 +- packages/nuxt/package.json | 2 +- packages/nuxt/src/auto-imports/module.ts | 11 ++++++----- packages/nuxt/src/auto-imports/transform.ts | 10 ++++++++-- packages/schema/package.json | 2 +- test/fixtures/basic/pages/index.vue | 2 ++ yarn.lock | 14 +++++++------- 7 files changed, 26 insertions(+), 17 deletions(-) diff --git a/packages/kit/package.json b/packages/kit/package.json index bfd2c03dcb7..44e5cf59910 100644 --- a/packages/kit/package.json +++ b/packages/kit/package.json @@ -29,7 +29,7 @@ "scule": "^0.2.1", "semver": "^7.3.7", "unctx": "^1.1.4", - "unimport": "^0.4.1", + "unimport": "^0.4.3", "untyped": "^0.4.4" }, "devDependencies": { diff --git a/packages/nuxt/package.json b/packages/nuxt/package.json index b80e7d7b863..0e83271803b 100644 --- a/packages/nuxt/package.json +++ b/packages/nuxt/package.json @@ -62,7 +62,7 @@ "ufo": "^0.8.4", "unctx": "^1.1.4", "unenv": "^0.5.2", - "unimport": "^0.4.1", + "unimport": "^0.4.3", "unplugin": "^0.7.1", "untyped": "^0.4.4", "vue": "^3.2.37", diff --git a/packages/nuxt/src/auto-imports/module.ts b/packages/nuxt/src/auto-imports/module.ts index 447d3f67780..fdd9b23976a 100644 --- a/packages/nuxt/src/auto-imports/module.ts +++ b/packages/nuxt/src/auto-imports/module.ts @@ -38,6 +38,7 @@ export default defineNuxtModule>({ const ctx = createUnimport({ presets: options.presets, imports: options.imports, + virtualImports: ['#imports'], addons: { vueTemplate: true } @@ -56,11 +57,11 @@ export default defineNuxtModule>({ composablesDirs = composablesDirs.map(dir => normalize(dir)) // Support for importing from '#imports' - addTemplate({ - filename: 'imports.mjs', - getContents: () => ctx.toExports() - }) - nuxt.options.alias['#imports'] = join(nuxt.options.buildDir, 'imports') + // addTemplate({ + // filename: 'imports.mjs', + // getContents: () => ctx.toExports() + // }) + // nuxt.options.alias['#imports'] = join(nuxt.options.buildDir, 'imports') // Transpile and injection // @ts-ignore temporary disabled due to #746 diff --git a/packages/nuxt/src/auto-imports/transform.ts b/packages/nuxt/src/auto-imports/transform.ts index fb5427c4fdc..3fcd826c284 100644 --- a/packages/nuxt/src/auto-imports/transform.ts +++ b/packages/nuxt/src/auto-imports/transform.ts @@ -12,7 +12,7 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx const { pathname, search } = parseURL(decodeURIComponent(pathToFileURL(id).href)) const { type, macro } = parseQuery(search) - const exclude = options.transform?.exclude || [/[\\/]node_modules[\\/]/] + const exclude = options.transform?.exclude || [] const include = options.transform?.include || [] // Custom includes - exclude node_modules by default @@ -34,7 +34,13 @@ export const TransformPlugin = createUnplugin(({ ctx, options, sourcemap }: {ctx } }, async transform (_code, id) { - const { code, s } = await ctx.injectImports(_code, id) + const isNodeModule = id.match(/[\\/]node_modules[\\/]/) + // For modules in node_modules, we only transform `#imports` but not doing auto-imports + if (isNodeModule && !_code.match(/(['"])#imports\1/)) { + return + } + + const { code, s } = await ctx.injectImports(_code, id, { autoImport: !isNodeModule }) if (code === _code) { return } diff --git a/packages/schema/package.json b/packages/schema/package.json index 4338125247b..a6fff45b85a 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -29,7 +29,7 @@ "scule": "^0.2.1", "std-env": "^3.1.1", "ufo": "^0.8.4", - "unimport": "^0.4.1" + "unimport": "^0.4.3" }, "engines": { "node": "^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0" diff --git a/test/fixtures/basic/pages/index.vue b/test/fixtures/basic/pages/index.vue index 133f790600d..06903d38513 100644 --- a/test/fixtures/basic/pages/index.vue +++ b/test/fixtures/basic/pages/index.vue @@ -18,6 +18,8 @@