1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- // Copyright (c) Jupyter Development Team.
- // Distributed under the terms of the Modified BSD License.
- const data = require('./package.json');
- const Build = require('@jupyterlab/builder').Build;
- const webpack = require('webpack');
- const merge = require('webpack-merge').default;
- const baseConfig = require('@jupyterlab/builder/lib/webpack.config.base');
- const { ModuleFederationPlugin } = webpack.container;
- const fs = require('fs-extra');
- const path = require('path');
- const Handlebars = require('handlebars');
- // Ensure a clear build directory.
- const buildDir = path.resolve(__dirname, 'build');
- if (fs.existsSync(buildDir)) {
- fs.removeSync(buildDir);
- }
- fs.ensureDirSync(buildDir);
- // Configuration to handle extension assets
- const extensionAssetConfig = Build.ensureAssets({
- packageNames: jlab.extensions,
- output: buildDir
- });
- const singletons = {};
- jlab.singletonPackages.forEach(element => {
- singletons[element] = { singleton: true };
- });
- // Create a list of application extensions and mime extensions from
- // jlab.extensions
- const extensions = {};
- const mimeExtensions = {};
- for (const key of jlab.extensions) {
- const {
- jupyterlab: { extension, mimeExtension }
- } = require(`${key}/package.json`);
- if (extension !== undefined) {
- extensions[key] = extension === true ? '' : extension;
- }
- if (mimeExtension !== undefined) {
- mimeExtensions[key] = mimeExtension === true ? '' : mimeExtension;
- }
- }
- // Create the entry point file.
- const source = fs.readFileSync('index.template.js').toString();
- const template = Handlebars.compile(source);
- const extData = {
- jupyterlab_extensions: extensions,
- jupyterlab_mime_extensions: mimeExtensions
- };
- const result = template(extData);
- fs.writeFileSync(path.join(buildDir, 'index.js'), result);
- // Make a bootstrap entrypoint
- const entryPoint = path.join(buildDir, 'bootstrap.js');
- fs.copySync('./bootstrap.js', entryPoint);
- if (process.env.NODE_ENV === 'production') {
- baseConfig.mode = 'production';
- }
- module.exports = [
- merge(baseConfig, {
- mode: 'development',
- entry: ['./publicpath.js', './' + path.relative(__dirname, entryPoint)],
- output: {
- path: buildDir,
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_OUTPUT']
- },
- filename: 'bundle.js'
- },
- plugins: [
- new ModuleFederationPlugin({
- library: {
- type: 'var',
- name: ['_JUPYTERLAB', 'CORE_LIBRARY_FEDERATION']
- },
- name: 'CORE_FEDERATION',
- shared: {
- ...data.resolutions,
- ...singletons
- }
- })
- ]
- })
- ].concat(extensionAssetConfig);
|