From 247dc70a1a9bcb6effe2280438cecce4b0fca3ef Mon Sep 17 00:00:00 2001 From: high1 Date: Wed, 23 Nov 2022 17:22:19 +0000 Subject: [PATCH 1/3] feat(node/plugins): esbuild options - since https://github.com/evanw/esbuild/releases/tag/v0.14.51 esbuild supports JSX transformations, so it makes sense that jsx and jsxImportSource are forwarded along with other relevant options --- packages/vite/src/node/plugins/esbuild.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 129ec41abca7e0..5224d1f2773aaf 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -51,8 +51,10 @@ type TSConfigJSON = { extends?: string compilerOptions?: { target?: string + jsx?: 'preserve' | 'react' | 'react-jsx' | 'react-jsxdev' | 'react-native' jsxFactory?: string jsxFragmentFactory?: string + jsxImportSource?: string useDefineForClassFields?: boolean importsNotUsedAsValues?: 'remove' | 'preserve' | 'error' preserveValueImports?: boolean @@ -93,8 +95,10 @@ export async function transformWithEsbuild( // https://esbuild.github.io/content-types/#tsconfig-json const meaningfulFields: Array = [ 'target', + 'jsx', 'jsxFactory', 'jsxFragmentFactory', + 'jsxImportSource', 'useDefineForClassFields', 'importsNotUsedAsValues', 'preserveValueImports' From 92902f04e8c2890d409f54ae61aedbcb07442f3f Mon Sep 17 00:00:00 2001 From: high1 Date: Thu, 1 Dec 2022 22:23:19 +0100 Subject: [PATCH 2/3] fix: set relevant TSConfigRaw options to undefined - set TSConfigRaw options to undefined when a parallel option is defined inside Vite configuration --- package.json | 2 +- packages/vite/package.json | 2 +- packages/vite/src/node/plugins/esbuild.ts | 35 ++- pnpm-lock.yaml | 259 +--------------------- 4 files changed, 33 insertions(+), 265 deletions(-) diff --git a/package.json b/package.json index 1750cafe823860..3c020d79200d1f 100644 --- a/package.json +++ b/package.json @@ -61,7 +61,7 @@ "@typescript-eslint/eslint-plugin": "^5.44.0", "@typescript-eslint/parser": "^5.44.0", "conventional-changelog-cli": "^2.2.2", - "esbuild": "^0.15.9", + "esbuild": "^0.15.11", "eslint": "^8.28.0", "eslint-define-config": "^1.12.0", "eslint-plugin-import": "^2.26.0", diff --git a/packages/vite/package.json b/packages/vite/package.json index f4cd6994fc57fe..583a2ecc0c368d 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -58,7 +58,7 @@ }, "//": "READ CONTRIBUTING.md to understand what to put under deps vs. devDeps!", "dependencies": { - "esbuild": "^0.15.9", + "esbuild": "^0.15.11", "postcss": "^8.4.19", "resolve": "^1.22.1", "rollup": "~3.3.0" diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index 8d22f0fb3095ef..1050a4f3adcc3a 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -50,14 +50,15 @@ export type ESBuildTransformResult = Omit & { type TSConfigJSON = { extends?: string compilerOptions?: { - target?: string - jsx?: 'preserve' | 'react' | 'react-jsx' | 'react-jsxdev' | 'react-native' + alwaysStrict?: boolean + importsNotUsedAsValues?: 'remove' | 'preserve' | 'error' + jsx?: 'preserve' | 'react' | 'react-jsx' | 'react-jsxdev' jsxFactory?: string jsxFragmentFactory?: string jsxImportSource?: string - useDefineForClassFields?: boolean - importsNotUsedAsValues?: 'remove' | 'preserve' | 'error' preserveValueImports?: boolean + target?: string + useDefineForClassFields?: boolean } [key: string]: any } @@ -94,14 +95,15 @@ export async function transformWithEsbuild( // these fields would affect the compilation result // https://esbuild.github.io/content-types/#tsconfig-json const meaningfulFields: Array = [ - 'target', + 'alwaysStrict', + 'importsNotUsedAsValues', 'jsx', 'jsxFactory', 'jsxFragmentFactory', 'jsxImportSource', - 'useDefineForClassFields', - 'importsNotUsedAsValues', - 'preserveValueImports' + 'preserveValueImports', + 'target', + 'useDefineForClassFields' ] const compilerOptionsForFile: TSCompilerOptions = {} if (loader === 'ts' || loader === 'tsx') { @@ -134,6 +136,23 @@ export async function transformWithEsbuild( tsconfigRaw } as ESBuildOptions + if ( + options && + typeof resolvedOptions.tsconfigRaw === 'object' && + resolvedOptions.tsconfigRaw.compilerOptions + ) { + options.jsx && (resolvedOptions.tsconfigRaw.compilerOptions.jsx = undefined) + options.jsxFactory && + (resolvedOptions.tsconfigRaw.compilerOptions.jsxFactory = undefined) + options.jsxFragment && + (resolvedOptions.tsconfigRaw.compilerOptions.jsxFragmentFactory = + undefined) + options.jsxImportSource && + (resolvedOptions.tsconfigRaw.compilerOptions.jsxImportSource = undefined) + options.target && + (resolvedOptions.tsconfigRaw.compilerOptions.target = undefined) + } + delete resolvedOptions.include delete resolvedOptions.exclude delete resolvedOptions.jsxInject diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 630cec2dd51ed1..4e4a4b2d058df4 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: '@typescript-eslint/eslint-plugin': ^5.44.0 '@typescript-eslint/parser': ^5.44.0 conventional-changelog-cli: ^2.2.2 - esbuild: ^0.15.9 + esbuild: ^0.15.11 eslint: ^8.28.0 eslint-define-config: ^1.12.0 eslint-plugin-import: ^2.26.0 @@ -238,7 +238,7 @@ importers: dotenv: ^16.0.3 dotenv-expand: ^9.0.0 es-module-lexer: ^1.1.0 - esbuild: ^0.15.9 + esbuild: ^0.15.11 estree-walker: ^3.0.1 etag: ^1.8.1 fast-glob: ^3.2.12 @@ -273,7 +273,7 @@ importers: ufo: ^0.8.6 ws: ^8.11.0 dependencies: - esbuild: 0.15.9 + esbuild: 0.15.11 postcss: 8.4.19 resolve: 1.22.1 rollup: 3.3.0 @@ -2052,16 +2052,6 @@ packages: cpu: [arm] os: [android] requiresBuild: true - dev: true - optional: true - - /@esbuild/android-arm/0.15.9: - resolution: {integrity: sha512-VZPy/ETF3fBG5PiinIkA0W/tlsvlEgJccyN2DzWZEl0DlVKRbu91PvY2D6Lxgluj4w9QtYHjOWjAT44C+oQ+EQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [android] - requiresBuild: true - dev: false optional: true /@esbuild/linux-loong64/0.15.11: @@ -2070,16 +2060,6 @@ packages: cpu: [loong64] os: [linux] requiresBuild: true - dev: true - optional: true - - /@esbuild/linux-loong64/0.15.9: - resolution: {integrity: sha512-O+NfmkfRrb3uSsTa4jE3WApidSe3N5++fyOVGP1SmMZi4A3BZELkhUUvj5hwmMuNdlpzAZ8iAPz2vmcR7DCFQA==} - engines: {node: '>=12'} - cpu: [loong64] - os: [linux] - requiresBuild: true - dev: false optional: true /@eslint/eslintrc/1.3.3: @@ -4245,16 +4225,6 @@ packages: cpu: [x64] os: [android] requiresBuild: true - dev: true - optional: true - - /esbuild-android-64/0.15.9: - resolution: {integrity: sha512-HQCX7FJn9T4kxZQkhPjNZC7tBWZqJvhlLHPU2SFzrQB/7nDXjmTIFpFTjt7Bd1uFpeXmuwf5h5fZm+x/hLnhbw==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: false optional: true /esbuild-android-arm64/0.14.50: @@ -4272,16 +4242,6 @@ packages: cpu: [arm64] os: [android] requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64/0.15.9: - resolution: {integrity: sha512-E6zbLfqbFVCNEKircSHnPiSTsm3fCRxeIMPfrkS33tFjIAoXtwegQfVZqMGR0FlsvVxp2NEDOUz+WW48COCjSg==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: false optional: true /esbuild-darwin-64/0.14.50: @@ -4299,16 +4259,6 @@ packages: cpu: [x64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.15.9: - resolution: {integrity: sha512-gI7dClcDN/HHVacZhTmGjl0/TWZcGuKJ0I7/xDGJwRQQn7aafZGtvagOFNmuOq+OBFPhlPv1T6JElOXb0unkSQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: false optional: true /esbuild-darwin-arm64/0.14.50: @@ -4326,16 +4276,6 @@ packages: cpu: [arm64] os: [darwin] requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.15.9: - resolution: {integrity: sha512-VZIMlcRN29yg/sv7DsDwN+OeufCcoTNaTl3Vnav7dL/nvsApD7uvhVRbgyMzv0zU/PP0xRhhIpTyc7lxEzHGSw==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: false optional: true /esbuild-freebsd-64/0.14.50: @@ -4353,16 +4293,6 @@ packages: cpu: [x64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.15.9: - resolution: {integrity: sha512-uM4z5bTvuAXqPxrI204txhlsPIolQPWRMLenvGuCPZTnnGlCMF2QLs0Plcm26gcskhxewYo9LkkmYSS5Czrb5A==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: false optional: true /esbuild-freebsd-arm64/0.14.50: @@ -4380,16 +4310,6 @@ packages: cpu: [arm64] os: [freebsd] requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.15.9: - resolution: {integrity: sha512-HHDjT3O5gWzicGdgJ5yokZVN9K9KG05SnERwl9nBYZaCjcCgj/sX8Ps1jvoFSfNCO04JSsHSOWo4qvxFuj8FoA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: false optional: true /esbuild-linux-32/0.14.50: @@ -4407,16 +4327,6 @@ packages: cpu: [ia32] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.15.9: - resolution: {integrity: sha512-AQIdE8FugGt1DkcekKi5ycI46QZpGJ/wqcMr7w6YUmOmp2ohQ8eO4sKUsOxNOvYL7hGEVwkndSyszR6HpVHLFg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-64/0.14.50: @@ -4434,16 +4344,6 @@ packages: cpu: [x64] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.15.9: - resolution: {integrity: sha512-4RXjae7g6Qs7StZyiYyXTZXBlfODhb1aBVAjd+ANuPmMhWthQilWo7rFHwJwL7DQu1Fjej2sODAVwLbcIVsAYQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-arm/0.14.50: @@ -4461,16 +4361,6 @@ packages: cpu: [arm] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.15.9: - resolution: {integrity: sha512-3Zf2GVGUOI7XwChH3qrnTOSqfV1V4CAc/7zLVm4lO6JT6wbJrTgEYCCiNSzziSju+J9Jhf9YGWk/26quWPC6yQ==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-arm64/0.14.50: @@ -4488,16 +4378,6 @@ packages: cpu: [arm64] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.15.9: - resolution: {integrity: sha512-a+bTtxJmYmk9d+s2W4/R1SYKDDAldOKmWjWP0BnrWtDbvUBNOm++du0ysPju4mZVoEFgS1yLNW+VXnG/4FNwdQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-mips64le/0.14.50: @@ -4515,16 +4395,6 @@ packages: cpu: [mips64el] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.15.9: - resolution: {integrity: sha512-Zn9HSylDp89y+TRREMDoGrc3Z4Hs5u56ozZLQCiZAUx2+HdbbXbWdjmw3FdTJ/i7t5Cew6/Q+6kfO3KCcFGlyw==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-ppc64le/0.14.50: @@ -4542,16 +4412,6 @@ packages: cpu: [ppc64] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.15.9: - resolution: {integrity: sha512-OEiOxNAMH9ENFYqRsWUj3CWyN3V8P3ZXyfNAtX5rlCEC/ERXrCEFCJji/1F6POzsXAzxvUJrTSTCy7G6BhA6Fw==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-riscv64/0.14.50: @@ -4569,16 +4429,6 @@ packages: cpu: [riscv64] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.15.9: - resolution: {integrity: sha512-ukm4KsC3QRausEFjzTsOZ/qqazw0YvJsKmfoZZm9QW27OHjk2XKSQGGvx8gIEswft/Sadp03/VZvAaqv5AIwNA==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-linux-s390x/0.14.50: @@ -4596,16 +4446,6 @@ packages: cpu: [s390x] os: [linux] requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.15.9: - resolution: {integrity: sha512-uDOQEH55wQ6ahcIKzQr3VyjGc6Po/xblLGLoUk3fVL1qjlZAibtQr6XRfy5wPJLu/M2o0vQKLq4lyJ2r1tWKcw==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: false optional: true /esbuild-netbsd-64/0.14.50: @@ -4623,16 +4463,6 @@ packages: cpu: [x64] os: [netbsd] requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.15.9: - resolution: {integrity: sha512-yWgxaYTQz+TqX80wXRq6xAtb7GSBAp6gqLKfOdANg9qEmAI1Bxn04IrQr0Mzm4AhxvGKoHzjHjMgXbCCSSDxcw==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: false optional: true /esbuild-openbsd-64/0.14.50: @@ -4650,16 +4480,6 @@ packages: cpu: [x64] os: [openbsd] requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.15.9: - resolution: {integrity: sha512-JmS18acQl4iSAjrEha1MfEmUMN4FcnnrtTaJ7Qg0tDCOcgpPPQRLGsZqhes0vmx8VA6IqRyScqXvaL7+Q0Uf3A==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: false optional: true /esbuild-sunos-64/0.14.50: @@ -4677,16 +4497,6 @@ packages: cpu: [x64] os: [sunos] requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.15.9: - resolution: {integrity: sha512-UKynGSWpzkPmXW3D2UMOD9BZPIuRaSqphxSCwScfEE05Be3KAmvjsBhht1fLzKpiFVJb0BYMd4jEbWMyJ/z1hQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: false optional: true /esbuild-windows-32/0.14.50: @@ -4704,16 +4514,6 @@ packages: cpu: [ia32] os: [win32] requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.15.9: - resolution: {integrity: sha512-aqXvu4/W9XyTVqO/hw3rNxKE1TcZiEYHPsXM9LwYmKSX9/hjvfIJzXwQBlPcJ/QOxedfoMVH0YnhhQ9Ffb0RGA==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: false optional: true /esbuild-windows-64/0.14.50: @@ -4731,16 +4531,6 @@ packages: cpu: [x64] os: [win32] requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.15.9: - resolution: {integrity: sha512-zm7h91WUmlS4idMtjvCrEeNhlH7+TNOmqw5dJPJZrgFaxoFyqYG6CKDpdFCQXdyKpD5yvzaQBOMVTCBVKGZDEg==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: false optional: true /esbuild-windows-arm64/0.14.50: @@ -4758,16 +4548,6 @@ packages: cpu: [arm64] os: [win32] requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.15.9: - resolution: {integrity: sha512-yQEVIv27oauAtvtuhJVfSNMztJJX47ismRS6Sv2QMVV9RM+6xjbMWuuwM2nxr5A2/gj/mu2z9YlQxiwoFRCfZA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: false optional: true /esbuild/0.14.50: @@ -4799,7 +4579,7 @@ packages: dev: true /esbuild/0.15.11: - resolution: {integrity: sha1-Uk1IYSqap+3BdTyDRZy2/K4Mtm4=} + resolution: {integrity: sha512-OgHGuhlfZ//mToxjte1D5iiiQgWfJ2GByVMwEC/IuoXsBGkuyK1+KrjYu0laSpnN/L1UmLUCv0s25vObdc1bVg==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -4826,37 +4606,6 @@ packages: esbuild-windows-32: 0.15.11 esbuild-windows-64: 0.15.11 esbuild-windows-arm64: 0.15.11 - dev: true - - /esbuild/0.15.9: - resolution: {integrity: sha512-OnYr1rkMVxtmMHIAKZLMcEUlJmqcbxBz9QoBU8G9v455na0fuzlT/GLu6l+SRghrk0Mm2fSSciMmzV43Q8e0Gg==} - engines: {node: '>=12'} - hasBin: true - requiresBuild: true - optionalDependencies: - '@esbuild/android-arm': 0.15.9 - '@esbuild/linux-loong64': 0.15.9 - esbuild-android-64: 0.15.9 - esbuild-android-arm64: 0.15.9 - esbuild-darwin-64: 0.15.9 - esbuild-darwin-arm64: 0.15.9 - esbuild-freebsd-64: 0.15.9 - esbuild-freebsd-arm64: 0.15.9 - esbuild-linux-32: 0.15.9 - esbuild-linux-64: 0.15.9 - esbuild-linux-arm: 0.15.9 - esbuild-linux-arm64: 0.15.9 - esbuild-linux-mips64le: 0.15.9 - esbuild-linux-ppc64le: 0.15.9 - esbuild-linux-riscv64: 0.15.9 - esbuild-linux-s390x: 0.15.9 - esbuild-netbsd-64: 0.15.9 - esbuild-openbsd-64: 0.15.9 - esbuild-sunos-64: 0.15.9 - esbuild-windows-32: 0.15.9 - esbuild-windows-64: 0.15.9 - esbuild-windows-arm64: 0.15.9 - dev: false /escalade/3.1.1: resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} From 0fa3d6835035a9cd2ae5bf42b1dab39363f86378 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BF=A0=20/=20green?= Date: Wed, 7 Dec 2022 16:10:08 +0900 Subject: [PATCH 3/3] chore: add comment --- packages/vite/src/node/plugins/esbuild.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/vite/src/node/plugins/esbuild.ts b/packages/vite/src/node/plugins/esbuild.ts index d84ca00f96273a..0dc57c6328dee5 100644 --- a/packages/vite/src/node/plugins/esbuild.ts +++ b/packages/vite/src/node/plugins/esbuild.ts @@ -136,6 +136,8 @@ export async function transformWithEsbuild( tsconfigRaw, } as ESBuildOptions + // esbuild uses tsconfig fields when both the normal options and tsconfig was set + // but we want to prioritize the normal options if ( options && typeof resolvedOptions.tsconfigRaw === 'object' &&