From 8b0ad14b1d22650ad9424e24af1da4a2d42505f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 21 Jul 2022 13:58:45 +0800 Subject: [PATCH 1/7] test: add mts cjs resolve --- playground/resolve/index.html | 18 ++++++++++++++++++ playground/resolve/ts-extension/hellocjs.cts | 1 + playground/resolve/ts-extension/hellomjs.mts | 1 + playground/resolve/ts-extension/index.ts | 4 +++- 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 playground/resolve/ts-extension/hellocjs.cts create mode 100644 playground/resolve/ts-extension/hellomjs.mts diff --git a/playground/resolve/index.html b/playground/resolve/index.html index bca49d55388e27..674819fc0195a6 100644 --- a/playground/resolve/index.html +++ b/playground/resolve/index.html @@ -52,6 +52,18 @@

fail

+

+ A ts module can import another ESM module using its corresponding mjs file + name +

+

fail

+ +

+ A ts module can import another CommonJS module using its corresponding cjs + file name +

+

fail

+

Resolve file name containing dot

fail

@@ -167,6 +179,12 @@

resolve package that contains # in path

import { msgTsx as tsTsxExtensionMsg } from './ts-extension' text('.tsx-extension', tsTsxExtensionMsg) + import { msgCjs as tsCjsExtensionMsg } from './ts-extension' + text('.cjs-extension', tsCjsExtensionMsg) + + import { msgMjs as tsMjsExtensionMsg } from './ts-extension' + text('.mjs-extension', tsMjsExtensionMsg) + // filename with dot import { bar } from './util/bar.util' text('.dot', bar()) diff --git a/playground/resolve/ts-extension/hellocjs.cts b/playground/resolve/ts-extension/hellocjs.cts new file mode 100644 index 00000000000000..8bfd9caa7407ca --- /dev/null +++ b/playground/resolve/ts-extension/hellocjs.cts @@ -0,0 +1 @@ +export const msgCjs = '[success] use .cjs extension to import a CommonJS module' diff --git a/playground/resolve/ts-extension/hellomjs.mts b/playground/resolve/ts-extension/hellomjs.mts new file mode 100644 index 00000000000000..62e0ff53345826 --- /dev/null +++ b/playground/resolve/ts-extension/hellomjs.mts @@ -0,0 +1 @@ +export const msgMjs = '[success] use .mjs extension to import a ESM module' diff --git a/playground/resolve/ts-extension/index.ts b/playground/resolve/ts-extension/index.ts index bdb326f8778e64..60612037e02fbe 100644 --- a/playground/resolve/ts-extension/index.ts +++ b/playground/resolve/ts-extension/index.ts @@ -1,5 +1,7 @@ import { msg } from './hello.js' import { msgJsx } from './hellojsx.jsx' import { msgTsx } from './hellotsx.js' +import { msgCjs } from './hellocjs.cjs' +import { msgMjs } from './hellomjs.mjs' -export { msg, msgJsx, msgTsx } +export { msg, msgJsx, msgTsx, msgCjs, msgMjs } From f394a28e3d65fac3e874f7c91b65e3ea2e712824 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 21 Jul 2022 14:08:17 +0800 Subject: [PATCH 2/7] feat: supports cjs mts --- packages/vite/src/node/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 331f9ba0ceb667..6fae218248115e 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -261,7 +261,7 @@ export const isDataUrl = (url: string): boolean => dataUrlRE.test(url) export const virtualModuleRE = /^virtual-module:.*/ export const virtualModulePrefix = 'virtual-module:' -const knownJsSrcRE = /\.((j|t)sx?|mjs|vue|marko|svelte|astro)($|\?)/ +const knownJsSrcRE = /\.([cm]?(j|t)sx?|mjs|vue|marko|svelte|astro)($|\?)/ export const isJSRequest = (url: string): boolean => { url = cleanUrl(url) if (knownJsSrcRE.test(url)) { From d61e8232c71c7fe6904dfa62edbdc286b58c9102 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 21 Jul 2022 14:18:56 +0800 Subject: [PATCH 3/7] feat: support esbuild --- packages/vite/src/node/constants.ts | 3 ++- packages/vite/src/node/optimizer/index.ts | 2 +- packages/vite/src/node/plugins/esbuild.ts | 4 +++- packages/vite/src/node/utils.ts | 2 +- 4 files changed, 7 insertions(+), 4 deletions(-) diff --git a/packages/vite/src/node/constants.ts b/packages/vite/src/node/constants.ts index 5a108652ef7ce6..b5fb126e97beaa 100644 --- a/packages/vite/src/node/constants.ts +++ b/packages/vite/src/node/constants.ts @@ -24,6 +24,7 @@ export const ESBUILD_MODULES_TARGET = [ export const DEFAULT_EXTENSIONS = [ '.mjs', '.js', + '.mts', '.ts', '.jsx', '.tsx', @@ -41,7 +42,7 @@ export const DEFAULT_CONFIG_FILES = [ export const JS_TYPES_RE = /\.(?:j|t)sx?$|\.mjs$/ -export const OPTIMIZABLE_ENTRY_RE = /\.(?:(m|c)?js|ts)$/ +export const OPTIMIZABLE_ENTRY_RE = /\.(?:[cm]?[jt]s)$/ export const SPECIAL_QUERY_RE = /[\?&](?:worker|sharedworker|raw|url)\b/ diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 2954accf1fc909..4a6e062e346fb1 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -113,7 +113,7 @@ export interface DepOptimizationConfig { * List of file extensions that can be optimized. A corresponding esbuild * plugin must exist to handle the specific extension. * - * By default, Vite can optimize `.mjs`, `.js`, and `.ts` files. This option + * By default, Vite can optimize `.mjs`, `.js`, `.ts`, and `.mts` files. This option * allows specifying additional extensions. * * @experimental diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 6ed963a5d5981c..584c1c0e306cf9 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -78,6 +78,8 @@ export async function transformWithEsbuild( if (ext === 'cjs' || ext === 'mjs') { loader = 'js' + } else if (ext === 'mts' || ext === 'mts') { + loader = 'ts' } else { loader = ext as Loader } @@ -170,7 +172,7 @@ export async function transformWithEsbuild( export function esbuildPlugin(options: ESBuildOptions = {}): Plugin { const filter = createFilter( - options.include || /\.(tsx?|jsx)$/, + options.include || /\.[cm]?(tsx?|jsx)$/, options.exclude || /\.js$/ ) diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 6fae218248115e..0f7d77c966b922 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -261,7 +261,7 @@ export const isDataUrl = (url: string): boolean => dataUrlRE.test(url) export const virtualModuleRE = /^virtual-module:.*/ export const virtualModulePrefix = 'virtual-module:' -const knownJsSrcRE = /\.([cm]?(j|t)sx?|mjs|vue|marko|svelte|astro)($|\?)/ +const knownJsSrcRE = /\.([cm]?(j|t)sx?|vue|marko|svelte|astro)($|\?)/ export const isJSRequest = (url: string): boolean => { url = cleanUrl(url) if (knownJsSrcRE.test(url)) { From 3f6d803331016634233019421de3f2d6305bc3e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 21 Jul 2022 14:39:27 +0800 Subject: [PATCH 4/7] fix: typo --- packages/vite/src/node/optimizer/index.ts | 2 +- playground/resolve/ts-extension/hellomjs.mts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/optimizer/index.ts b/packages/vite/src/node/optimizer/index.ts index 4a6e062e346fb1..b544bc9f060d20 100644 --- a/packages/vite/src/node/optimizer/index.ts +++ b/packages/vite/src/node/optimizer/index.ts @@ -1009,7 +1009,7 @@ function needsInterop( } if (output) { - // if a peer dependency used require() on a ESM dependency, esbuild turns the + // if a peer dependency used require() on an ESM dependency, esbuild turns the // ESM dependency's entry chunk into a single default export... detect // such cases by checking exports mismatch, and force interop. const generatedExports: string[] = output.exports diff --git a/playground/resolve/ts-extension/hellomjs.mts b/playground/resolve/ts-extension/hellomjs.mts index 62e0ff53345826..501637c83f1257 100644 --- a/playground/resolve/ts-extension/hellomjs.mts +++ b/playground/resolve/ts-extension/hellomjs.mts @@ -1 +1 @@ -export const msgMjs = '[success] use .mjs extension to import a ESM module' +export const msgMjs = '[success] use .mjs extension to import an ESM module' From a26f79ff32bf9cacecb6daee8c2e77b9b667b1cf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Thu, 21 Jul 2022 14:46:22 +0800 Subject: [PATCH 5/7] fix: loader --- packages/vite/src/node/plugins/esbuild.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 584c1c0e306cf9..02fe08d56b09b7 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -78,7 +78,7 @@ export async function transformWithEsbuild( if (ext === 'cjs' || ext === 'mjs') { loader = 'js' - } else if (ext === 'mts' || ext === 'mts') { + } else if (ext === 'cts' || ext === 'mts') { loader = 'ts' } else { loader = ext as Loader From 30fa6b769a9bd0fc20f91bdbcc630449fbf814bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Fri, 22 Jul 2022 09:38:28 +0800 Subject: [PATCH 6/7] fix: regexp --- packages/vite/src/node/plugins/esbuild.ts | 2 +- packages/vite/src/node/utils.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 02fe08d56b09b7..f26b194aab3a4e 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -172,7 +172,7 @@ export async function transformWithEsbuild( export function esbuildPlugin(options: ESBuildOptions = {}): Plugin { const filter = createFilter( - options.include || /\.[cm]?(tsx?|jsx)$/, + options.include || /\.([cm]?ts|[jt]sx)$/, options.exclude || /\.js$/ ) diff --git a/packages/vite/src/node/utils.ts b/packages/vite/src/node/utils.ts index 0f7d77c966b922..4398ec70f56121 100644 --- a/packages/vite/src/node/utils.ts +++ b/packages/vite/src/node/utils.ts @@ -261,7 +261,7 @@ export const isDataUrl = (url: string): boolean => dataUrlRE.test(url) export const virtualModuleRE = /^virtual-module:.*/ export const virtualModulePrefix = 'virtual-module:' -const knownJsSrcRE = /\.([cm]?(j|t)sx?|vue|marko|svelte|astro)($|\?)/ +const knownJsSrcRE = /\.((j|t)sx?|m[jt]s|vue|marko|svelte|astro)($|\?)/ export const isJSRequest = (url: string): boolean => { url = cleanUrl(url) if (knownJsSrcRE.test(url)) { From 6137879a1e5cda9c5c3a278ee6e4ae2fc7c5918b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=89=E5=92=B2=E6=99=BA=E5=AD=90?= Date: Fri, 22 Jul 2022 16:06:16 +0800 Subject: [PATCH 7/7] fix: regexp --- packages/vite/src/node/plugins/esbuild.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index f26b194aab3a4e..9a95c1be816580 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -172,7 +172,7 @@ export async function transformWithEsbuild( export function esbuildPlugin(options: ESBuildOptions = {}): Plugin { const filter = createFilter( - options.include || /\.([cm]?ts|[jt]sx)$/, + options.include || /\.(m?ts|[jt]sx)$/, options.exclude || /\.js$/ )