浏览代码

Add --development and --source-map flags for building extensions.

The development flag implies the source-map flag. Normally, in production mode, source map files are not generated.
Jason Grout 4 年之前
父节点
当前提交
5a856afb55

+ 5 - 2
builder/src/build-labextension.ts

@@ -20,7 +20,8 @@ import { run } from '@jupyterlab/buildutils';
 
 commander
   .description('Build an extension')
-  .option('--development', 'build in development mode')
+  .option('--development', 'build in development mode (implies --source-map)')
+  .option('--source-map', 'generate source maps')
   .requiredOption('--core-path <path>', 'the core package directory')
   .option(
     '--static-url <url>',
@@ -31,6 +32,7 @@ commander
     const mode = cmd.development ? 'development' : 'production';
     const corePath = path.resolve(cmd.corePath || process.cwd());
     const packagePath = path.resolve(cmd.args[0]);
+    const sourceMap = cmd.sourceMap ? 'true' : '';
 
     const webpack = require.resolve('webpack-cli/bin/cli.js');
     const config = path.join(__dirname, 'webpack.config.ext.js');
@@ -42,7 +44,8 @@ commander
       PACKAGE_PATH: packagePath,
       NODE_ENV: mode,
       CORE_PATH: corePath,
-      STATIC_URL: cmd.staticUrl
+      STATIC_URL: cmd.staticUrl,
+      SOURCE_MAP: sourceMap
     };
     run(cmdText, { env: { ...process.env, ...env } });
   });

+ 1 - 2
builder/src/webpack.config.base.ts

@@ -73,10 +73,9 @@ try {
 }
 
 module.exports = {
-  devtool: 'source-map',
   bail: true,
   module: { rules },
-  resolve: { alias: { url: false, buffer: false, ...phosphorAlias } },
+  resolve: { alias: { 'url': false, 'buffer': false, ...phosphorAlias } },
   watchOptions: {
     poll: 500,
     aggregateTimeout: 1000

+ 13 - 7
builder/src/webpack.config.ext.ts

@@ -16,6 +16,12 @@ const { ModuleFederationPlugin } = webpack.container;
 const packagePath: string = process.env.PACKAGE_PATH || '';
 const corePath: string = process.env.CORE_PATH || '';
 const staticUrl: string = process.env.STATIC_URL || '';
+const mode =
+  process.env.NODE_ENV === 'development' ? 'development' : 'production';
+const devtool =
+  mode === 'development' || process.env.SOURCE_MAP === 'true'
+    ? 'source-map'
+    : undefined;
 
 const data = require(path.join(packagePath, 'package.json'));
 
@@ -202,6 +208,8 @@ class CleanupPlugin {
 
 const config = [
   merge(baseConfig, {
+    mode,
+    devtool,
     // Using empty object {} for entry because we want only
     // entrypoints generated by ModuleFederationPlugin
     entry: {
@@ -230,11 +238,9 @@ const config = [
   })
 ].concat(extras);
 
-module.exports = (env: any, argv: any) => {
-  if (argv.mode === 'development') {
-    const logPath = path.join(outputPath, 'build_log.json');
-    fs.writeFileSync(logPath, JSON.stringify(config, null, '  '));
-  }
+if (mode === 'development') {
+  const logPath = path.join(outputPath, 'build_log.json');
+  fs.writeFileSync(logPath, JSON.stringify(config, null, '  '));
+}
 
-  return config;
-};
+export default config;

+ 6 - 2
jupyterlab/dynamic_labextensions.py

@@ -164,7 +164,7 @@ def develop_labextension_py(module, user=False, sys_prefix=False, overwrite=Fals
     return full_dests
 
 
-def build_labextension(path, logger=None, development=False, static_url=None):
+def build_labextension(path, logger=None, development=False, static_url=None, source_map = False):
     """Build a labextension in the given path"""
     core_path = osp.join(HERE, 'staging')
     ext_path = osp.abspath(path)
@@ -179,11 +179,13 @@ def build_labextension(path, logger=None, development=False, static_url=None):
         arguments.extend(['--static-url', static_url])
     if development:
         arguments.append('--development')
+    if source_map:
+        arguments.append('--source-map')
 
     subprocess.check_call(arguments, cwd=ext_path)
 
 
-def watch_labextension(path, labextensions_path, logger=None, development=True):
+def watch_labextension(path, labextensions_path, logger=None, development=False, source_map=False):
     """Watch a labextension in a given path"""
     core_path = osp.join(HERE, 'staging')
     ext_path = osp.abspath(path)
@@ -211,6 +213,8 @@ def watch_labextension(path, labextensions_path, logger=None, development=True):
     arguments = ['node', builder, '--core-path', core_path,  '--watch', ext_path]
     if development:
         arguments.append('--development')
+    if source_map:
+        arguments.append('--source-map')
 
     subprocess.check_call(arguments, cwd=ext_path)
 

+ 16 - 3
jupyterlab/labextensions.py

@@ -200,13 +200,18 @@ class BuildLabExtensionApp(BaseExtensionApp):
     development = Bool(False, config=True,
         help="Build in development mode")
 
+    source_map = Bool(False, config=True,
+        help="Generage source maps")
+
     aliases = {
-        'static-url': 'BuildLabExtensionApp.static_url'
+        'static-url': 'BuildLabExtensionApp.static_url',
+        'development': 'BuildLabExtensionApp.development',
+        'source-map': 'BuildLabExtensionApp.source_map'
     }
 
     def run_task(self):
         self.extra_args = self.extra_args or [os.getcwd()]
-        build_labextension(self.extra_args[0], logger=self.log, development=self.development, static_url=self.static_url or None)
+        build_labextension(self.extra_args[0], logger=self.log, development=self.development, static_url=self.static_url or None, source_map = self.source_map)
 
 
 class WatchLabExtensionApp(BaseExtensionApp):
@@ -215,10 +220,18 @@ class WatchLabExtensionApp(BaseExtensionApp):
     development = Bool(True, config=True,
         help="Build in development mode")
 
+    source_map = Bool(False, config=True,
+        help="Generage source maps")
+
+    aliases = {
+        'development': 'BuildLabExtensionApp.development',
+        'source-map': 'BuildLabExtensionApp.source_map'
+
+    }
     def run_task(self):
         self.extra_args = self.extra_args or [os.getcwd()]
         labextensions_path = self.labextensions_path
-        watch_labextension(self.extra_args[0], labextensions_path, logger=self.log, development=self.development)
+        watch_labextension(self.extra_args[0], labextensions_path, logger=self.log, development=self.development, source_map=self.source_map)
 
 
 class UpdateLabExtensionApp(BaseExtensionApp):