123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- .. _extension_migration_2_3:
- JupyterLab 2.x to 3.x Extension Migration Guide
- ===============================================
- This is a migration guide for updating extensions that support JupyterLab 2.x to work in JupyterLab 3.x.
- Upgrading library versions manually
- -----------------------------------
- To update the extensions so it is compatible with the 3.0 release, update the compatibility
- range of the ``@jupyterlab`` dependencies in the ``package.json``. The diff should be similar to:
- .. code:: diff
- index 6f1562f..3fcdf37 100644
- --- a/package.json
- +++ b/package.json
- "dependencies": {
- - "@jupyterlab/application": "^2.0.0",
- + "@jupyterlab/application": "^3.0.0",
- Upgrading library versions using the upgrade script
- ---------------------------------------------------
- JupyterLab 3.0 provides a script to upgrade an existing extension to use the new extension system and packaging.
- First, make sure to update to JupyterLab 3.0 and install ``jupyter-packaging`` and ``cookiecutter``. With ``pip``:
- .. code:: bash
- pip install jupyterlab -U
- pip install jupyter-packaging cookiecutter
- Or with ``conda``:
- .. code:: bash
- conda install -c conda-forge jupyterlab=3 jupyter-packaging cookiecutter
- Then at the root folder of the extension, run:
- .. code:: bash
- python -m jupyterlab.upgrade_extension .
- The upgrade script creates the necessary files for packaging the JupyterLab extension as a Python package, such as
- ``setup.py`` and ``pyproject.toml``.
- The upgrade script also updates the dependencies in ``package.json`` to the ``^3.0.0`` packages. Here is an example diff:
- .. code:: diff
- index 6f1562f..3fcdf37 100644
- --- a/package.json
- +++ b/package.json
- @@ -29,9 +29,13 @@
- "scripts": {
- - "build": "tsc",
- - "build:labextension": "npm run clean:labextension && mkdirp myextension/labextension && cd myextension/labextension && npm pack ../..",
- - "clean": "rimraf lib tsconfig.tsbuildinfo",
- + "build": "jlpm run build:lib && jlpm run build:labextension:dev",
- + "build:prod": "jlpm run build:lib && jlpm run build:labextension",
- + "build:lib": "tsc",
- + "build:labextension": "jupyter labextension build .",
- + "build:labextension:dev": "jupyter labextension build --development True .",
- + "clean": "rimraf lib tsconfig.tsbuildinfo myextension/labextension",
- + "clean:all": "jlpm run clean:lib && jlpm run clean:labextension",
- "clean:labextension": "rimraf myextension/labextension",
- "eslint": "eslint . --ext .ts,.tsx --fix",
- "eslint:check": "eslint . --ext .ts,.tsx",
- @@ -59,12 +63,12 @@
- ]
- },
- "dependencies": {
- - "@jupyterlab/application": "^2.0.0",
- - "@jupyterlab/apputils": "^2.0.0",
- - "@jupyterlab/observables": "^3.0.0",
- + "@jupyterlab/builder": "^3.0.0",
- + "@jupyterlab/application": "^3.0.0",
- + "@jupyterlab/apputils": "^3.0.0",
- + "@jupyterlab/observables": "^3.0.0",
- "@lumino/algorithm": "^1.2.3",
- "@lumino/commands": "^1.10.1",
- "@lumino/disposable": "^1.3.5",
- @@ -99,6 +103,13 @@
- - "typescript": "~3.8.3"
- + "typescript": "~4.0.1"
- },
- "jupyterlab": {
- - "extension": "lib/plugin"
- + "extension": "lib/plugin",
- + "outputDir": "myextension/labextension/"
- }
- }
- On the diff above, we see that additional development scripts are also added, as they are used by the new extension system workflow.
- The diff also shows the new ``@jupyterlab/builder`` as a ``devDependency``.
- ``@jupyterlab/builder`` is a package required to build the extension as a federated extension.
- It hides away internal dependencies such as ``webpack``, and produces the assets that can then be distributed as part of a Python package.
- Extension developers do not need to interact with ``@jupyterlab/builder`` directly, but instead can use the
- ``jupyter labextension build`` command. This command is run automatically as part of the ``build`` script
- (``jlpm run build``).
- For more details about the new file structure and packaging of the extension, check out the extension tutorial: :ref:`extension_tutorial`
- Publishing the extension to PyPI and conda-forge
- ------------------------------------------------
- Starting from JupyterLab 3.0, extensions can be distributed as a Python package.
- The extension tutorial provides explanations to package the extension so it can be
- published on PyPI and conda forge: :ref:`extension_tutorial_publish`.
- .. note::
- While publishing to PyPI is the new recommended way for distributing extensions to users,
- it is still useful to continue publishing extensions to ``npm`` as well,
- so other developers can extend them in their own extensions.
|