From 6a35aa7ac67a66a59d3999889400cbd3a99310b4 Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 9 Nov 2019 14:17:07 +0800 Subject: [PATCH 1/2] merge fisker:corejs-support --- cspell.json | 1 + package.json | 1 + scripts/build/bundler.js | 33 ++++++++++++++++++++++++++++----- scripts/build/config.js | 1 + yarn.lock | 5 +++++ 5 files changed, 36 insertions(+), 5 deletions(-) diff --git a/cspell.json b/cspell.json index 2dcef816911a..5ee054463707 100644 --- a/cspell.json +++ b/cspell.json @@ -61,6 +61,7 @@ "codemirror", "codemod", "codemods", + "corejs", "combinator", "commonmark", "concating", diff --git a/package.json b/package.json index 892631d09cc8..d3664782e07c 100644 --- a/package.json +++ b/package.json @@ -82,6 +82,7 @@ "benchmark": "2.1.4", "builtin-modules": "3.1.0", "codecov": "3.6.1", + "core-js": "3.4.0", "cross-env": "6.0.3", "eslint": "6.6.0", "eslint-config-prettier": "6.5.0", diff --git a/scripts/build/bundler.js b/scripts/build/bundler.js index 7cdc86387a16..bf99ff5febf3 100644 --- a/scripts/build/bundler.js +++ b/scripts/build/bundler.js @@ -40,21 +40,40 @@ function getBabelConfig(bundle) { const config = { babelrc: false, plugins: bundle.babelPlugins || [], + exclude: [], compact: bundle.type === "plugin" ? false : "auto" }; + const presetEnvConfig = { + targets: { + node: "4" + }, + modules: false + }; if (bundle.type === "core") { config.plugins.push( require.resolve("./babel-plugins/transform-custom-require") ); + + if (bundle.corejs) { + Object.assign(presetEnvConfig, { + useBuiltIns: "usage", + corejs: { + version: 3, + proposals: true + } + }); + config.exclude.push(/\/core-js\//); + } } - const targets = { node: 4 }; if (bundle.target === "universal") { // From https://jamie.build/last-2-versions - targets.browsers = [">0.25%", "not ie 11", "not op_mini all"]; + presetEnvConfig.targets.browsers = [ + ">0.25%", + "not ie 11", + "not op_mini all" + ]; } - config.presets = [ - [require.resolve("@babel/preset-env"), { targets, modules: false }] - ]; + config.presets = [[require.resolve("@babel/preset-env"), presetEnvConfig]]; return config; } @@ -206,6 +225,10 @@ function runWebpack(config) { } module.exports = async function createBundle(bundle, cache) { + if (bundle.corejs && bundle.type !== "core") { + throw new Error("Only core bundles can use corejs"); + } + const inputOptions = getRollupConfig(bundle); const outputOptions = getRollupOutputOptions(bundle); diff --git a/scripts/build/config.js b/scripts/build/config.js index bacf937871f1..62009c11fdad 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -19,6 +19,7 @@ const babelReplaceArrayIncludesWithIndexof = require.resolve( * @property {Object.} replace - map of strings to replace when processing the bundle * @property {string[]} babelPlugins - babel plugins * @property {Object?} terserOptions - options for `terser` + * @property {boolean?} corejs - use corejs for `@babel/preset-env` * @typedef {Object} CommonJSConfig * @property {Object} namedExports - for cases where rollup can't infer what's exported diff --git a/yarn.lock b/yarn.lock index cb575cf966df..7ea3470d8fd7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1991,6 +1991,11 @@ core-js-pure@3.1.3: resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.3.tgz#4c90752d5b9471f641514f3728f51c1e0783d0b5" integrity sha512-k3JWTrcQBKqjkjI0bkfXS0lbpWPxYuHWfMMjC1VDmzU4Q58IwSbuXSo99YO/hUHlw/EB4AlfA2PVxOGkrIq6dA== +core-js@3.4.0: + version "3.4.0" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.4.0.tgz#29ea478601789c72f2978e9bb98f43546f89d3aa" + integrity sha512-lQxb4HScV71YugF/X28LtePZj9AB7WqOpcB+YztYxusvhrgZiQXPmCYfPC5LHsw/+ScEtDbXU3xbqH3CjBRmYA== + core-js@^2.4.0, core-js@^2.5.0: version "2.5.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.1.tgz#ae6874dc66937789b80754ff5428df66819ca50b" From b44d40511a8ef025c1a397f3ffec1929f406b625 Mon Sep 17 00:00:00 2001 From: fisker Date: Sat, 9 Nov 2019 14:18:18 +0800 Subject: [PATCH 2/2] Enable `corejs` option for core bundle `bin-prettier.js` and `third-party.js` --- scripts/build/config.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/build/config.js b/scripts/build/config.js index 62009c11fdad..fe03bbcc4e1c 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -173,12 +173,14 @@ const coreBundles = [ input: "bin/prettier.js", type: "core", output: "bin-prettier.js", + corejs: true, target: "node", externals: [path.resolve("src/common/third-party.js")] }, { input: "src/common/third-party.js", type: "core", + corejs: true, target: "node", replace: { // cosmiconfig@5 -> import-fresh uses `require` to resolve js config, which caused Error: