Resolve .browserslistrc as a project-wide file (#13028)

This commit is contained in:
Nicolò Ribaudo
2021-03-25 21:37:42 +01:00
committed by GitHub
parent 8c445e60ba
commit b0d83daceb
7 changed files with 30 additions and 12 deletions

View File

@@ -126,7 +126,7 @@ export default function* loadPrivatePartialConfig(
const options: NormalizedOptions = {
...merged,
targets: resolveTargets(merged, absoluteRootDir, filename),
targets: resolveTargets(merged, absoluteRootDir, absoluteRootDir),
// Tack the passes onto the object itself so that, if this object is
// passed back to Babel a second time, it will be in the right structure

View File

@@ -8,7 +8,7 @@ export function resolveTargets(
// eslint-disable-next-line no-unused-vars
root: string,
// eslint-disable-next-line no-unused-vars
filename: string | void,
configFilePath: string | void,
): Targets {
let { targets } = options;
if (typeof targets === "string" || Array.isArray(targets)) {

View File

@@ -14,7 +14,7 @@ import getTargets, { type Targets } from "@babel/helper-compilation-targets";
export function resolveTargets(
options: ValidatedOptions,
root: string,
filename: string | void,
configFilePath: string = root,
): Targets {
let { targets } = options;
if (typeof targets === "string" || Array.isArray(targets)) {
@@ -27,13 +27,13 @@ export function resolveTargets(
let configFile;
if (typeof options.browserslistConfigFile === "string") {
configFile = path.resolve(root, options.browserslistConfigFile);
configFile = path.resolve(configFilePath, options.browserslistConfigFile);
}
return getTargets((targets: any), {
ignoreBrowserslistConfig: options.browserslistConfigFile === false,
configFile,
configPath: filename ?? root,
configPath: root,
browserslistEnv: options.browserslistEnv,
});
}

View File

@@ -0,0 +1,3 @@
{
"browserslistConfigFile": "./.browserslistrc"
}

View File

@@ -91,11 +91,24 @@ describe("browserslist", () => {
).toEqual({ chrome: "80.0.0" });
});
it("loads .browserslistrc relative to the input file", () => {
it("loads .browserslistrc relative to the root", () => {
expect(
loadOptions({
cwd: join(cwd, "fixtures", "targets"),
filename: "./nested/test.js",
filename: "./node_modules/dep/test.js",
}).targets,
).toEqual({ chrome: "80.0.0" });
});
// TODO: browserslistConfig is currently resolved starting from the root
// rather than from the config file.
// eslint-disable-next-line jest/no-disabled-tests
it.skip("loads nested .browserslistrc files if explicitly specified", () => {
expect(
loadOptions({
cwd: join(cwd, "fixtures", "targets"),
filename: "./node_modules/dep/test.js",
babelrcRoots: ["./node_modules/dep/"],
}).targets,
).toEqual({ edge: "14.0.0" });
});