separate default builtins for platforms (#226)

This commit is contained in:
Mikhail Shustov 2017-03-28 00:43:18 +02:00 committed by Brian Ng
parent a9f7c7db4c
commit ae3dfda1d6
9 changed files with 52 additions and 6 deletions

View File

@ -1,4 +1,4 @@
export default [
export const defaultWebIncludes = [
"web.timers",
"web.immediate",
"web.dom.iterable"

View File

@ -1,6 +1,6 @@
import browserslist from "browserslist";
import builtInsList from "../data/built-ins.json";
import defaultInclude from "./default-includes";
import { defaultWebIncludes } from "./default-includes";
import moduleTransformations from "./module-transformations";
import normalizeOptions, { getElectronChromeVersion } from "./normalize-options.js";
import pluginList from "../data/plugins.json";
@ -139,7 +139,7 @@ const logPlugin = (plugin, targets, list) => {
};
const filterItem = (targets, exclusions, list, item) => {
const isDefault = defaultInclude.indexOf(item) >= 0;
const isDefault = defaultWebIncludes.indexOf(item) >= 0;
const notExcluded = exclusions.indexOf(item) === -1;
if (isDefault) return notExcluded;
@ -161,6 +161,14 @@ export const transformIncludesAndExcludes = (opts) => ({
builtIns: opts.filter((opt) => opt.match(/^(es\d+|web)\./))
});
function getPlatformSpecificDefaultFor(targets) {
const targetNames = Object.keys(targets);
const isAnyTarget = !targetNames.length;
const isWebTarget = targetNames.some((name) => name !== "node");
return (isAnyTarget || isWebTarget) ? defaultWebIncludes : [];
}
export default function buildPreset(context, opts = {}) {
const validatedOptions = normalizeOptions(opts);
const { debug, loose, moduleType, useBuiltIns } = validatedOptions;
@ -181,7 +189,7 @@ export default function buildPreset(context, opts = {}) {
polyfillTargets = getBuiltInTargets(targets);
const filterBuiltIns = filterItem.bind(null, polyfillTargets, exclude.builtIns, builtInsList);
polyfills = Object.keys(builtInsList)
.concat(defaultInclude)
.concat(getPlatformSpecificDefaultFor(polyfillTargets))
.filter(filterBuiltIns)
.concat(include.builtIns);
}

View File

@ -1,7 +1,7 @@
import invariant from "invariant";
import { electronToChromium } from "electron-to-chromium";
import builtInsList from "../data/built-ins.json";
import defaultInclude from "./default-includes";
import { defaultWebIncludes } from "./default-includes";
import moduleTransformations from "./module-transformations";
import pluginFeatures from "../data/plugin-features";
@ -9,7 +9,7 @@ const validIncludesAndExcludes = [
...Object.keys(pluginFeatures),
...Object.keys(moduleTransformations).map((m) => moduleTransformations[m]),
...Object.keys(builtInsList),
...defaultInclude
...defaultWebIncludes,
];
let hasBeenWarned = false;

View File

@ -0,0 +1 @@
import "babel-polyfill";

View File

@ -0,0 +1,7 @@
import "core-js/modules/es7.string.pad-start";
import "core-js/modules/es7.string.pad-end";
import "core-js/modules/web.timers";
import "core-js/modules/web.immediate";
import "core-js/modules/web.dom.iterable";
import "regenerator-runtime/runtime";

View File

@ -0,0 +1,13 @@
{
"presets": [
["../../../../lib", {
"targets": {
"chrome": 55,
"node": 7.6,
"uglify": true
},
"modules": false,
"useBuiltIns": true
}]
]
}

View File

@ -0,0 +1 @@
import "babel-polyfill";

View File

@ -0,0 +1,4 @@
import "core-js/modules/es7.string.pad-start";
import "core-js/modules/es7.string.pad-end";
import "regenerator-runtime/runtime";

View File

@ -0,0 +1,12 @@
{
"presets": [
["../../../../lib", {
"targets": {
"node": 7.6,
"uglify": true
},
"modules": false,
"useBuiltIns": true
}]
]
}