From 71d9a08488a3e0939eb874cacd0acbb1e6409a3a Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Mon, 16 Sep 2019 17:13:32 +0800 Subject: [PATCH] Minify postcss parser (#6395) * Update webpack to v4 * add todo * add link * Minify postcss parser * update yarn.lock * chore: update yarn.lock --- package.json | 1 + scripts/build/build.js | 2 +- scripts/build/bundler.js | 22 +++++++++++++++------- scripts/build/config.js | 9 ++++++++- yarn.lock | 2 +- 5 files changed, 26 insertions(+), 10 deletions(-) diff --git a/package.json b/package.json index 3c782422e..e5b6ffd12 100644 --- a/package.json +++ b/package.json @@ -114,6 +114,7 @@ "snapshot-diff": "0.4.0", "strip-ansi": "4.0.0", "tempy": "0.2.1", + "terser-webpack-plugin": "1.4.1", "webpack": "4.39.1" }, "scripts": { diff --git a/scripts/build/build.js b/scripts/build/build.js index b02f005be..c81579c33 100644 --- a/scripts/build/build.js +++ b/scripts/build/build.js @@ -99,7 +99,7 @@ async function run(params) { await execa("rm", ["-rf", ".cache"]); } - const bundleCache = new Cache(".cache/", "v14"); + const bundleCache = new Cache(".cache/", "v15"); await bundleCache.load(); console.log(chalk.inverse(" Building packages ")); diff --git a/scripts/build/bundler.js b/scripts/build/bundler.js index 6d575faea..a1faf687b 100644 --- a/scripts/build/bundler.js +++ b/scripts/build/bundler.js @@ -159,7 +159,7 @@ function getWebpackConfig(bundle) { } const root = path.resolve(__dirname, "..", ".."); - return { + const config = { entry: path.resolve(root, bundle.input), module: { rules: [ @@ -179,14 +179,22 @@ function getWebpackConfig(bundle) { libraryTarget: "umd", // https://github.com/webpack/webpack/issues/6642 globalObject: 'new Function("return this")()' - }, - optimization: { - // TODO: enable this - // `parser-postcss.js` can't work with terser - // https://github.com/prettier/prettier/pull/6200#issuecomment-500018106 - minimize: false } }; + + if (bundle.terserOptions) { + const TerserPlugin = require("terser-webpack-plugin"); + + config.optimization = { + minimizer: [ + new TerserPlugin({ + terserOptions: bundle.terserOptions + }) + ] + }; + } + + return config; } function runWebpack(config) { diff --git a/scripts/build/config.js b/scripts/build/config.js index c9abc5c1a..13618f694 100644 --- a/scripts/build/config.js +++ b/scripts/build/config.js @@ -15,6 +15,7 @@ const PROJECT_ROOT = path.resolve(__dirname, "../.."); * @property {string[]} externals - array of paths that should not be included in the final bundle * @property {Object.} replace - map of strings to replace when processing the bundle * @property {string[]} babelPlugins - babel plugins + * @property {Object?} terserOptions - options for `terser` * @typedef {Object} CommonJSConfig * @property {Object} namedExports - for cases where rollup can't infer what's exported @@ -59,7 +60,13 @@ const parsers = [ input: "src/language-css/parser-postcss.js", target: "universal", // postcss has dependency cycles that don't work with rollup - bundler: "webpack" + bundler: "webpack", + // postcss need keep_fnames when minify + terserOptions: { + mangle: { + keep_fnames: true + } + } }, { input: "src/language-graphql/parser-graphql.js", diff --git a/yarn.lock b/yarn.lock index 5604ea2e1..31b5b62f9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6785,7 +6785,7 @@ tempy@0.2.1: temp-dir "^1.0.0" unique-string "^1.0.0" -terser-webpack-plugin@^1.4.1: +terser-webpack-plugin@1.4.1, terser-webpack-plugin@^1.4.1: version "1.4.1" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4" integrity sha512-ZXmmfiwtCLfz8WKZyYUuuHf3dMYEjg8NrjHMb0JqHVHVOSkzp3cW2/XG1fP3tRhqEqSzMwzzRQGtAPbs4Cncxg==