Skip to content

Commit e26d443

Browse files
samschdevongovett
authored andcommitted
Add useBuiltIns babel-preset-env option (fix #843) (#878)
1 parent 6e8ae0d commit e26d443

6 files changed

Lines changed: 29 additions & 4 deletions

File tree

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,7 @@
6666
"@vue/component-compiler-utils": "^1.0.0",
6767
"babel-cli": "^6.26.0",
6868
"babel-plugin-transform-async-super": "^1.0.0",
69+
"babel-polyfill": "^6.26.0",
6970
"babel-register": "^6.26.0",
7071
"bsb-js": "^1.0.1",
7172
"codecov": "^3.0.0",

src/transforms/babel.js

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,7 @@ function shouldIgnoreBabelrc(filename, babelrc) {
217217
async function getEnvConfig(asset, isSourceModule) {
218218
// Load the target engines for the app and generate a babel-preset-env config
219219
let targetEngines = await getTargetEngines(asset, true);
220-
let targetEnv = await getEnvPlugins(targetEngines);
220+
let targetEnv = await getEnvPlugins(targetEngines, true);
221221
if (!targetEnv) {
222222
return null;
223223
}
@@ -226,7 +226,7 @@ async function getEnvConfig(asset, isSourceModule) {
226226
// Otherwise, load the source engines and generate a babel-present-env config.
227227
if (asset.name.includes(NODE_MODULES) && !isSourceModule) {
228228
let sourceEngines = await getTargetEngines(asset, false);
229-
let sourceEnv = (await getEnvPlugins(sourceEngines)) || targetEnv;
229+
let sourceEnv = (await getEnvPlugins(sourceEngines, false)) || targetEnv;
230230

231231
// Do a diff of the returned plugins. We only need to process the remaining plugins to get to the app target.
232232
let sourcePlugins = new Set(sourceEnv.map(p => p[0]));
@@ -240,7 +240,7 @@ async function getEnvConfig(asset, isSourceModule) {
240240

241241
const envCache = new Map();
242242

243-
async function getEnvPlugins(targets) {
243+
async function getEnvPlugins(targets, useBuiltIns = false) {
244244
if (!targets) {
245245
return null;
246246
}
@@ -250,7 +250,10 @@ async function getEnvPlugins(targets) {
250250
return envCache.get(key);
251251
}
252252

253-
let plugins = presetEnv.default({}, {targets, modules: false}).plugins;
253+
let plugins = presetEnv.default(
254+
{},
255+
{targets, modules: false, useBuiltIns: useBuiltIns ? 'entry' : false}
256+
).plugins;
254257
envCache.set(key, plugins);
255258
return plugins;
256259
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"extends": "../.eslintrc.json",
3+
"parserOptions": {
4+
"sourceType": "module"
5+
}
6+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
import 'babel-polyfill';
2+
3+
export async function Bar() {}
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
{
2+
"name": "parcel-test-babel-polyfill-browserslist",
3+
"browserslist": ["last 2 Chrome versions"]
4+
}

test/javascript.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,14 @@ describe('javascript', function() {
628628
assert(!file.includes('class Bar {}'));
629629
});
630630

631+
it('should support splitting babel-polyfill using browserlist', async function() {
632+
await bundle(__dirname + '/integration/babel-polyfill/index.js');
633+
634+
let file = fs.readFileSync(__dirname + '/dist/index.js', 'utf8');
635+
assert(file.includes('async function Bar() {}'));
636+
assert(!file.includes('regenerator'));
637+
});
638+
631639
it('should support compiling with babel using browserslist for different environments', async function() {
632640
async function testBrowserListMultipleEnv(projectBasePath) {
633641
// Transpiled destructuring, like r = p.prop1, o = p.prop2, a = p.prop3;

0 commit comments

Comments
 (0)