diff --git a/packages/babel-helper-compilation-targets/src/index.ts b/packages/babel-helper-compilation-targets/src/index.ts index 2919080b86d7..31b9c40d0e27 100644 --- a/packages/babel-helper-compilation-targets/src/index.ts +++ b/packages/babel-helper-compilation-targets/src/index.ts @@ -219,7 +219,10 @@ export default function getTargets( esmodules = false; } - if (browsers) { + // 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); if (esmodules === "intersect") { 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..cbd5b50255c7 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,31 @@ 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" }), + ); + }, + ); + + 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 }, + ), + ); + }); + + 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(); + }); + (process.env.BABEL_8_BREAKING ? it : it.skip)( "'intersect' behaves like no-op if no browsers are specified", () => {