Browse Source

added explicit `minimize` option to lab build

telamonian 5 years ago
parent
commit
7e69eeb170

+ 2 - 1
dev_mode/package.json

@@ -5,7 +5,8 @@
   "scripts": {
     "build": "webpack",
     "build:prod": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --config webpack.prod.config.js",
-    "build:prod:stats": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --profile --config webpack.prod.config.js --json > stats.json",
+    "build:prod:minimize": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --config webpack.prod.minimize.config.js",
+    "build:prod:stats": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --profile --config webpack.prod.minimize.config.js --json > stats.json",
     "build:stats": "webpack --profile --json > stats.json",
     "clean": "rimraf build",
     "prepublishOnly": "npm run build",

+ 29 - 0
dev_mode/webpack.prod.minimize.config.js

@@ -0,0 +1,29 @@
+const TerserPlugin = require('terser-webpack-plugin');
+var merge = require('webpack-merge');
+var config = require('./webpack.config');
+
+config[0] = merge(config[0], {
+  mode: 'production',
+  devtool: 'source-map',
+  optimization: {
+    minimizer: [
+      new TerserPlugin({
+        parallel: false,
+        sourceMap: true,
+        terserOptions: {
+          compress: false,
+          ecma: 6,
+          mangle: true,
+          output: {
+            beautify: false,
+            comments: false
+          },
+          safari10: true
+        },
+        cache: process.platform !== 'win32'
+      })
+    ]
+  }
+});
+
+module.exports = config;

+ 1 - 0
jupyterlab/commands.py

@@ -990,6 +990,7 @@ class _AppHandler(object):
 
         for fname in ['index.js', 'webpack.config.js',
                       'webpack.prod.config.js',
+                      'webpack.prod.minimize.config.js',
                       '.yarnrc', 'yarn.js']:
             target = pjoin(staging, fname)
             shutil.copy(pjoin(HERE, 'staging', fname), target)

+ 12 - 1
jupyterlab/labapp.py

@@ -30,6 +30,7 @@ build_aliases['app-dir'] = 'LabBuildApp.app_dir'
 build_aliases['name'] = 'LabBuildApp.name'
 build_aliases['version'] = 'LabBuildApp.version'
 build_aliases['dev-build'] = 'LabBuildApp.dev_build'
+build_aliases['minimize'] = 'LabBuildApp.minimize'
 build_aliases['debug-log-path'] = 'DebugLogFileMixin.debug_log_path'
 
 build_flags = dict(flags)
@@ -64,11 +65,21 @@ class LabBuildApp(JupyterApp, DebugLogFileMixin):
     dev_build = Bool(False, config=True,
         help="Whether to build in dev mode (defaults to prod mode)")
 
+    minimize = Bool(True, config=True,
+        help="Whether to use a minifier during the Webpack build (defaults to True). Only affects production builds.")
+
     pre_clean = Bool(False, config=True,
         help="Whether to clean before building (defaults to False)")
 
     def start(self):
-        command = 'build:prod' if not self.dev_build else 'build'
+        if self.dev_build:
+            command = 'build'
+        else:
+            if self.minimize:
+                command = 'build:prod:minimize'
+            else:
+                command = 'build:prod'
+
         app_dir = self.app_dir or get_app_dir()
         self.log.info('JupyterLab %s', version)
         with self.debug_logging():

+ 2 - 1
jupyterlab/staging/package.json

@@ -5,7 +5,8 @@
   "scripts": {
     "build": "webpack",
     "build:prod": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --config webpack.prod.config.js",
-    "build:prod:stats": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --profile --config webpack.prod.config.js --json > stats.json",
+    "build:prod:minimize": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --config webpack.prod.minimize.config.js",
+    "build:prod:stats": "cross-env NODE_OPTIONS=--max_old_space_size=4096 webpack --profile --config webpack.prod.minimize.config.js --json > stats.json",
     "build:stats": "webpack --profile --json > stats.json",
     "clean": "rimraf build",
     "prepublishOnly": "npm run build",

+ 29 - 0
jupyterlab/staging/webpack.prod.minimize.config.js

@@ -0,0 +1,29 @@
+const TerserPlugin = require('terser-webpack-plugin');
+var merge = require('webpack-merge');
+var config = require('./webpack.config');
+
+config[0] = merge(config[0], {
+  mode: 'production',
+  devtool: 'source-map',
+  optimization: {
+    minimizer: [
+      new TerserPlugin({
+        parallel: false,
+        sourceMap: true,
+        terserOptions: {
+          compress: false,
+          ecma: 6,
+          mangle: true,
+          output: {
+            beautify: false,
+            comments: false
+          },
+          safari10: true
+        },
+        cache: process.platform !== 'win32'
+      })
+    ]
+  }
+});
+
+module.exports = config;