From bdc7fdf88d644e159ef40777e4c78a4c5258adec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=82=A3=E9=87=8C=E5=A5=BD=E8=84=8F=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E4=BB=A5?= <453491931@qq.com> Date: Wed, 23 Feb 2022 03:14:14 +0800 Subject: [PATCH 1/9] fix: remove `resolveTargets` call if browsers is empty In the process of using babel, I found that when `browserslistConfigFile` is not set to `false` and browsersList is not set, babel will still call the related methods of browsersList and caniuse-lite, I think this is unnecessary, Because browsers is an empty array at this time, it is a truthy value, so I modified the judgment condition to not handle it when it is undefined or an empty array. --- packages/babel-helper-compilation-targets/src/index.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/babel-helper-compilation-targets/src/index.ts b/packages/babel-helper-compilation-targets/src/index.ts index 2919080b86d7..166b6aae1b61 100644 --- a/packages/babel-helper-compilation-targets/src/index.ts +++ b/packages/babel-helper-compilation-targets/src/index.ts @@ -219,7 +219,7 @@ export default function getTargets( esmodules = false; } - if (browsers) { + if (browsers?.length) { const queryBrowsers = resolveTargets(browsers, options.browserslistEnv); if (esmodules === "intersect") { From c03d061e995461d09b9aabbf521b77c23a69d803 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Thu, 3 Mar 2022 02:58:58 +0800 Subject: [PATCH 2/9] fix: added validation for `browsers` values `[]` and `undefined` --- .../test/targets-parser.spec.js | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index 9b181469d4ef..d0a1834bb0d5 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -293,6 +293,27 @@ describe("getTargets", () => { }, ); + (process.env.BABEL_8_BREAKING ? it.skip : it)( + "'browsers' option will have no effect if it is an empty array - Babel 7", + () => { + expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( + getTargets({ esmodules: "intersect" }), + ); + }, + ); + + (process.env.BABEL_8_BREAKING ? it.skip : it)( + "The final 'browsers' handled variable will have no effect if it is an empty array - Babel 7", + () => { + expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( + getTargets( + { esmodules: "intersect" }, + { ignoreBrowserslistConfig: true }, + ), + ); + }, + ); + (process.env.BABEL_8_BREAKING ? it : it.skip)( "'intersect' behaves like no-op if no browsers are specified", () => { From 8e9453f7f87536fbf200d1685f37e014ea7a3fb7 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Fri, 4 Mar 2022 15:15:43 +0800 Subject: [PATCH 3/9] fix: added some comment of changed code. --- packages/babel-helper-compilation-targets/src/index.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/babel-helper-compilation-targets/src/index.ts b/packages/babel-helper-compilation-targets/src/index.ts index 166b6aae1b61..31b9c40d0e27 100644 --- a/packages/babel-helper-compilation-targets/src/index.ts +++ b/packages/babel-helper-compilation-targets/src/index.ts @@ -219,6 +219,9 @@ export default function getTargets( esmodules = false; } + // If current value of `browsers` is undefined (`ignoreBrowserslistConfig` should be `false`) + // or an empty array (without any user config, use default config), + // we don't need to call `resolveTargets` to execute the related methods of `browserslist` library. if (browsers?.length) { const queryBrowsers = resolveTargets(browsers, options.browserslistEnv); From 3eea970c478d6b5265a21c80d0d309a641964d3b Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Sun, 13 Mar 2022 23:51:02 +0800 Subject: [PATCH 4/9] fix: fixed some test preconditions, and added a test to see if a function is called via side effects. --- .../test/targets-parser.spec.js | 21 +++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index d0a1834bb0d5..bb7f0ff0aca9 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -293,18 +293,14 @@ describe("getTargets", () => { }, ); - (process.env.BABEL_8_BREAKING ? it.skip : it)( - "'browsers' option will have no effect if it is an empty array - Babel 7", - () => { + it("'browsers' option will have no effect if it is an empty array - Babel 7", () => { expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( getTargets({ esmodules: "intersect" }), ); }, ); - (process.env.BABEL_8_BREAKING ? it.skip : it)( - "The final 'browsers' handled variable will have no effect if it is an empty array - Babel 7", - () => { + it("The final 'browsers' handled variable will have no effect if it is an empty array", () => { expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( getTargets( { esmodules: "intersect" }, @@ -314,6 +310,19 @@ describe("getTargets", () => { }, ); + it("'resolveTargets' will be called rightly if 'browsers' is an array with some value", () => { + let x = 0; + + // 'test' is an unknown browser query, so methods of 'browserslist' library will throw an error + try { + getTargets({ esmodules: "intersect", browsers: ["test"] }); + } catch { + x++; + } + + expect(x).toBe(1); + }); + (process.env.BABEL_8_BREAKING ? it : it.skip)( "'intersect' behaves like no-op if no browsers are specified", () => { From 57669c6bc2d183ff28842f2863de742ad011598f Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Mon, 14 Mar 2022 00:41:25 +0800 Subject: [PATCH 5/9] fix: Fix test error --- .../test/targets-parser.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index bb7f0ff0aca9..90dc4adf2364 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -293,7 +293,8 @@ describe("getTargets", () => { }, ); - it("'browsers' option will have no effect if it is an empty array - Babel 7", () => { + (process.env.BABEL_8_BREAKING ? it.skip : it)( + "'browsers' option will have no effect if it is an empty array - Babel 7", () => { expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( getTargets({ esmodules: "intersect" }), ); From a3fe0731dae14b99b3322d90280c7bfa63c78233 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Mon, 14 Mar 2022 00:46:11 +0800 Subject: [PATCH 6/9] fix: Fix code style --- .../test/targets-parser.spec.js | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index 90dc4adf2364..e5b41ea33333 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -302,14 +302,13 @@ describe("getTargets", () => { ); it("The final 'browsers' handled variable will have no effect if it is an empty array", () => { - expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( - getTargets( - { esmodules: "intersect" }, - { ignoreBrowserslistConfig: true }, - ), - ); - }, - ); + expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( + getTargets( + { esmodules: "intersect" }, + { ignoreBrowserslistConfig: true }, + ), + ); + }); it("'resolveTargets' will be called rightly if 'browsers' is an array with some value", () => { let x = 0; From 2d531e5830b1dce535d19abadc2a757d58078319 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Mon, 14 Mar 2022 02:51:28 +0800 Subject: [PATCH 7/9] fix: Fix ESLint error of code style --- .../test/targets-parser.spec.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index e5b41ea33333..61a591ed83e1 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -294,7 +294,8 @@ describe("getTargets", () => { ); (process.env.BABEL_8_BREAKING ? it.skip : it)( - "'browsers' option will have no effect if it is an empty array - Babel 7", () => { + "'browsers' option will have no effect if it is an empty array - Babel 7", + () => { expect(getTargets({ esmodules: "intersect", browsers: [] })).toEqual( getTargets({ esmodules: "intersect" }), ); From 6527dc08527c4bdf40fa704f6253f1caa31edbd1 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Mon, 14 Mar 2022 07:00:02 +0800 Subject: [PATCH 8/9] fix: Refactoring test code using Jest's `toThrow` syntax. --- .../test/targets-parser.spec.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index 61a591ed83e1..2a66c663aef6 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -312,16 +312,8 @@ describe("getTargets", () => { }); it("'resolveTargets' will be called rightly if 'browsers' is an array with some value", () => { - let x = 0; - // 'test' is an unknown browser query, so methods of 'browserslist' library will throw an error - try { - getTargets({ esmodules: "intersect", browsers: ["test"] }); - } catch { - x++; - } - - expect(x).toBe(1); + expect(() => getTargets({ esmodules: "intersect", browsers: ["test"] })).toThrow(); }); (process.env.BABEL_8_BREAKING ? it : it.skip)( From 5a5af586375a385b489beab3c133c6aee65c42e3 Mon Sep 17 00:00:00 2001 From: gaosheng08 Date: Mon, 14 Mar 2022 12:47:54 +0800 Subject: [PATCH 9/9] fix: Re-fix ESLint error of code style --- .../test/targets-parser.spec.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js index 2a66c663aef6..cbd5b50255c7 100644 --- a/packages/babel-helper-compilation-targets/test/targets-parser.spec.js +++ b/packages/babel-helper-compilation-targets/test/targets-parser.spec.js @@ -313,7 +313,9 @@ describe("getTargets", () => { it("'resolveTargets' will be called rightly if 'browsers' is an array with some value", () => { // 'test' is an unknown browser query, so methods of 'browserslist' library will throw an error - expect(() => getTargets({ esmodules: "intersect", browsers: ["test"] })).toThrow(); + expect(() => + getTargets({ esmodules: "intersect", browsers: ["test"] }), + ).toThrow(); }); (process.env.BABEL_8_BREAKING ? it : it.skip)(