Parcourir la source

Merge pull request #8855 from blink1073/augment-develop-mode

Clean up dynamic extension CLI
Jason Grout il y a 4 ans
Parent
commit
d8bfd7b423

+ 11 - 1
buildutils/package.json

@@ -50,8 +50,10 @@
     "child_process": "~1.0.2",
     "commander": "~4.0.1",
     "crypto": "~1.0.1",
+    "css-loader": "~3.2.0",
     "dependency-graph": "^0.8.1",
     "duplicate-package-checker-webpack-plugin": "^3.0.0",
+    "file-loader": "~5.0.2",
     "fs": "~0.0.1-security",
     "fs-extra": "^8.1.0",
     "glob": "~7.1.6",
@@ -60,12 +62,20 @@
     "package-json": "^6.5.0",
     "path": "~0.12.7",
     "prettier": "^1.19.1",
+    "raw-loader": "~4.0.0",
     "semver": "^6.3.0",
     "sort-package-json": "~1.31.0",
+    "style-loader": "~1.0.1",
+    "svg-url-loader": "~3.0.3",
+    "terser-webpack-plugin": "^2.3.0",
+    "to-string-loader": "^1.1.6",
     "typescript": "~3.9.2",
+    "url-loader": "~3.0.0",
     "webpack": "~5.0.0-beta.26",
+    "webpack-cli": "^3.3.10",
     "webpack-merge": "^5.1.2",
-    "which": "^2.0.2"
+    "which": "^2.0.2",
+    "worker-loader": "^2.0.0"
   },
   "devDependencies": {
     "@types/fs-extra": "^8.0.1",

+ 11 - 1
buildutils/src/ensure-repo.ts

@@ -37,7 +37,17 @@ const UNUSED: Dict<string[]> = {
   '@jupyterlab/buildutils': [
     '@babel/core',
     '@babel/preset-env',
-    'babel-loader'
+    'babel-loader',
+    'css-loader',
+    'file-loader',
+    'raw-loader',
+    'style-loader',
+    'svg-url-loader',
+    'terser-webpack-plugin',
+    'to-string-loader',
+    'url-loader',
+    'webpack-cli',
+    'worker-loader'
   ],
   '@jupyterlab/services': ['node-fetch', 'ws'],
   '@jupyterlab/rendermime': ['@jupyterlab/mathjax2'],

+ 12 - 2
buildutils/src/webpack.config.ext.ts

@@ -119,8 +119,18 @@ shared[data.name] = {
   import: index
 };
 
-// Ensure a clean output directory.
-fs.rmdirSync(outputPath, { recursive: true });
+// Ensure a clean output directory - remove files but not the directory
+// in case it is a symlink
+if (fs.existsSync(outputPath)) {
+  const outputFiles = fs.readdirSync(outputPath);
+  outputFiles.forEach(filePath => {
+    if (fs.statSync(filePath).isFile()) {
+      fs.unlinkSync(filePath);
+    } else {
+      fs.rmdirSync(filePath, { recursive: true });
+    }
+  });
+}
 fs.mkdirSync(outputPath, { recursive: true });
 
 const extras = Build.ensureAssets({

+ 16 - 4
jupyterlab/dynamic_labextensions.py

@@ -15,6 +15,7 @@ import tarfile
 import zipfile
 from os.path import basename, join as pjoin, normpath
 import subprocess
+import sys
 
 from urllib.parse import urlparse
 from urllib.request import urlretrieve
@@ -150,7 +151,7 @@ def develop_labextension_py(module, user=False, sys_prefix=False, overwrite=Fals
             logger.info("Installing %s -> %s" % (src, dest))
 
         if not os.path.exists(src):
-            build_labextension(src, logger=logger)
+            build_labextension(base_path, logger=logger)
 
         full_dest = develop_labextension(
             src, overwrite=overwrite, symlink=symlink,
@@ -328,13 +329,24 @@ def _get_labextension_metadata(module):
         m = None
 
     if not hasattr(m, '_jupyter_labextension_paths'):
-        if osp.exists(osp.abspath(module)):
+        mod_path = osp.abspath(module)
+        if osp.exists(mod_path):
+            sys.path.insert(0, mod_path)
+
+            # First see if the module is already installed
             from setuptools import find_packages
-            packages = find_packages(module)
+            packages = find_packages(mod_path)
+
+            # If not, get the package name from setup.py
             if not packages:
-                raise ValueError('Could not find module %s' % module)
+                name = subprocess.check_output([sys.executable, 'setup.py', '--name'], cwd=mod_path)
+                packages = [name.decode('utf8').strip()]
+            
+            # Import the first found package
             m = import_item(packages[0])
 
+            sys.path.pop(0)
+
     if not hasattr(m, '_jupyter_labextension_paths'):
         raise KeyError('The Python module {} is not a valid labextension, '
                        'it is missing the `_jupyter_labextension_paths()` method.'.format(module))

+ 1 - 3
scripts/ci_script.sh

@@ -183,9 +183,7 @@ if [[ $GROUP == usage ]]; then
     jupyter labextension uninstall @jupyterlab/mock-extension --no-build --debug
     jupyter labextension uninstall @jupyterlab/notebook-extension --no-build --debug
     # Test with a dynamic install
-    pip install -e ./extension
-    jupyter labextension build ./extension
-    jupyter labextension develop mock_package
+    jupyter labextension develop extension --debug
     jupyter labextension list 1>labextensions 2>&1
     cat labextensions | grep "@jupyterlab/mock-extension.*enabled.*OK"
     jupyter labextension disable @jupyterlab/mock-extension --debug

+ 71 - 3
yarn.lock

@@ -7666,6 +7666,15 @@ enhanced-resolve@5.0.0-beta.10:
     graceful-fs "^4.2.0"
     tapable "^2.0.0-beta.10"
 
+enhanced-resolve@^4.1.1:
+  version "4.3.0"
+  resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126"
+  integrity sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==
+  dependencies:
+    graceful-fs "^4.1.2"
+    memory-fs "^0.5.0"
+    tapable "^1.0.0"
+
 enquirer@^2.3.5:
   version "2.3.6"
   resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d"
@@ -8625,7 +8634,7 @@ find-versions@^3.2.0:
   dependencies:
     semver-regex "^2.0.0"
 
-findup-sync@3.0.0:
+findup-sync@3.0.0, findup-sync@^3.0.0:
   version "3.0.0"
   resolved "https://registry.yarnpkg.com/findup-sync/-/findup-sync-3.0.0.tgz#17b108f9ee512dfb7a5c7f3c8b27ea9e1a9c08d1"
   integrity sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==
@@ -9048,7 +9057,7 @@ global-dirs@^0.1.0:
   dependencies:
     ini "^1.3.4"
 
-global-modules@2.0.0:
+global-modules@2.0.0, global-modules@^2.0.0:
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780"
   integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==
@@ -9886,6 +9895,11 @@ interpret@1.2.0, interpret@^1.0.0, interpret@^1.2.0:
   resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.2.0.tgz#d5061a6224be58e8083985f5014d844359576296"
   integrity sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==
 
+interpret@^1.4.0:
+  version "1.4.0"
+  resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e"
+  integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==
+
 intl-messageformat-parser@^1.8.1:
   version "1.8.1"
   resolved "https://registry.yarnpkg.com/intl-messageformat-parser/-/intl-messageformat-parser-1.8.1.tgz#0eb14c5618333be4c95c409457b66c8c33ddcc01"
@@ -11412,7 +11426,7 @@ loader-utils@1.2.3, loader-utils@^1.0.2, loader-utils@^1.1.0, loader-utils@^1.2.
     emojis-list "^2.0.0"
     json5 "^1.0.1"
 
-loader-utils@^1.0.0:
+loader-utils@^1.0.0, loader-utils@^1.4.0:
   version "1.4.0"
   resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-1.4.0.tgz#c579b5e34cb34b1a74edc6c1fb36bfa371d5a613"
   integrity sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==
@@ -11886,6 +11900,14 @@ memory-fs@^0.4.0, memory-fs@^0.4.1:
     errno "^0.1.3"
     readable-stream "^2.0.1"
 
+memory-fs@^0.5.0:
+  version "0.5.0"
+  resolved "https://registry.yarnpkg.com/memory-fs/-/memory-fs-0.5.0.tgz#324c01288b88652966d161db77838720845a8e3c"
+  integrity sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==
+  dependencies:
+    errno "^0.1.3"
+    readable-stream "^2.0.1"
+
 meow@^3.3.0:
   version "3.7.0"
   resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
@@ -16747,6 +16769,11 @@ v8-compile-cache@2.0.3, v8-compile-cache@^2.0.3:
   resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz#00f7494d2ae2b688cfe2899df6ed2c54bef91dbe"
   integrity sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==
 
+v8-compile-cache@^2.1.1:
+  version "2.1.1"
+  resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
+  integrity sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==
+
 v8-to-istanbul@^4.0.1:
   version "4.1.3"
   resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-4.1.3.tgz#22fe35709a64955f49a08a7c7c959f6520ad6f20"
@@ -17242,6 +17269,23 @@ webpack-cli@^3.3.10:
     v8-compile-cache "2.0.3"
     yargs "13.2.4"
 
+webpack-cli@^3.3.12:
+  version "3.3.12"
+  resolved "https://registry.yarnpkg.com/webpack-cli/-/webpack-cli-3.3.12.tgz#94e9ada081453cd0aa609c99e500012fd3ad2d4a"
+  integrity sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==
+  dependencies:
+    chalk "^2.4.2"
+    cross-spawn "^6.0.5"
+    enhanced-resolve "^4.1.1"
+    findup-sync "^3.0.0"
+    global-modules "^2.0.0"
+    import-local "^2.0.0"
+    interpret "^1.4.0"
+    loader-utils "^1.4.0"
+    supports-color "^6.1.0"
+    v8-compile-cache "^2.1.1"
+    yargs "^13.3.2"
+
 webpack-dev-middleware@^3.7.0:
   version "3.7.2"
   resolved "https://registry.yarnpkg.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.2.tgz#0019c3db716e3fa5cecbf64f2ab88a74bab331f3"
@@ -17715,6 +17759,14 @@ yargs-parser@^13.1.0:
     camelcase "^5.0.0"
     decamelize "^1.2.0"
 
+yargs-parser@^13.1.2:
+  version "13.1.2"
+  resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38"
+  integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==
+  dependencies:
+    camelcase "^5.0.0"
+    decamelize "^1.2.0"
+
 yargs-parser@^15.0.0:
   version "15.0.0"
   resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-15.0.0.tgz#cdd7a97490ec836195f59f3f4dbe5ea9e8f75f08"
@@ -17769,6 +17821,22 @@ yargs@3.32.0:
     window-size "^0.1.4"
     y18n "^3.2.0"
 
+yargs@^13.3.2:
+  version "13.3.2"
+  resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd"
+  integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==
+  dependencies:
+    cliui "^5.0.0"
+    find-up "^3.0.0"
+    get-caller-file "^2.0.1"
+    require-directory "^2.1.1"
+    require-main-filename "^2.0.0"
+    set-blocking "^2.0.0"
+    string-width "^3.0.0"
+    which-module "^2.0.0"
+    y18n "^4.0.0"
+    yargs-parser "^13.1.2"
+
 yargs@^14.2.2:
   version "14.2.2"
   resolved "https://registry.yarnpkg.com/yargs/-/yargs-14.2.2.tgz#2769564379009ff8597cdd38fba09da9b493c4b5"