Skip to content

Commit

Permalink
Fix browserslist env config in package.json and use options.mode for …
Browse files Browse the repository at this point in the history
…env selection (#5726)

* Add test

* Use mode for browserslist, fix from package.json

Co-authored-by: Jasper De Moor <jasperdemoor@gmail.com>
  • Loading branch information
mischnic and DeMoorJasper committed Jan 31, 2021
1 parent 771202a commit 850bf81
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 6 deletions.
17 changes: 12 additions & 5 deletions packages/core/core/src/requests/TargetRequest.js
Original file line number Diff line number Diff line change
Expand Up @@ -286,10 +286,21 @@ export class TargetResolver {
'Invalid engines in package.json',
) || {};
if (pkgEngines.browsers == null) {
let env =
this.options.env.BROWSERSLIST_ENV ??
this.options.env.NODE_ENV ??
this.options.mode;

if (pkg.browserslist != null) {
let pkgBrowserslist = pkg.browserslist;
let browserslist =
typeof pkgBrowserslist === 'object' && !Array.isArray(pkgBrowserslist)
? pkgBrowserslist[env]
: pkgBrowserslist;

pkgEngines = {
...pkgEngines,
browsers: pkg.browserslist,
browsers: browserslist,
};
} else {
let browserslistConfig = await resolveConfig(
Expand All @@ -303,10 +314,6 @@ export class TargetResolver {
if (browserslistConfig != null) {
let contents = await this.fs.readFile(browserslistConfig, 'utf8');
let config = browserslist.parseConfig(contents);
let env =
this.options.env.BROWSERSLIST_ENV ??
this.options.env.NODE_ENV ??
'production';
let browserslistBrowsers = config[env] || config.defaults;

if (browserslistBrowsers) {
Expand Down
47 changes: 47 additions & 0 deletions packages/core/integration-tests/test/cache.js
Original file line number Diff line number Diff line change
Expand Up @@ -2546,6 +2546,53 @@ describe('cache', function() {
);
assert(contents.includes('TRANSFORMED CODE'));
});

it('should update env browserslist in package.json when mode changes', async function() {
let env = process.env.NODE_ENV;
delete process.env.NODE_ENV;
try {
let b = await testCache({
scopeHoist: false,
minify: false,
mode: 'development',
async setup() {
let pkg = JSON.parse(
await overlayFS.readFile(
path.join(inputDir, 'package.json'),
'utf8',
),
);
pkg.browserslist = {
production: ['ie 11'],
development: ['Chrome 80'],
};
await overlayFS.writeFile(
path.join(inputDir, 'package.json'),
JSON.stringify(pkg, null, 2),
);
},
async update(b) {
let contents = await overlayFS.readFile(
b.bundleGraph.getBundles()[0].filePath,
'utf8',
);
assert(/class Test/.test(contents), 'should include class');

return {
mode: 'production',
};
},
});

let contents = await overlayFS.readFile(
b.bundleGraph.getBundles()[0].filePath,
'utf8',
);
assert(!/class Test/.test(contents), 'does not include class');
} finally {
process.env.NODE_ENV = env;
}
});
});

describe('resolver', function() {
Expand Down
2 changes: 1 addition & 1 deletion packages/core/types/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ export type PackageJSON = {
browser?: FilePath | {[FilePath]: FilePath | boolean, ...},
source?: FilePath | {[FilePath]: FilePath, ...},
alias?: {[PackageName | FilePath | Glob]: PackageName | FilePath, ...},
browserslist?: Array<string>,
browserslist?: Array<string> | {[string]: Array<string>},
engines?: Engines,
targets?: {[string]: PackageTargetDescriptor, ...},
dependencies?: PackageDependencies,
Expand Down

0 comments on commit 850bf81

Please sign in to comment.