webpack.config.js 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. var webpack = require('webpack');
  2. var path = require('path');
  3. var fs = require('fs-extra');
  4. var Handlebars = require('handlebars');
  5. var crypto = require('crypto');
  6. var package_data = require('./package.json');
  7. var Build = require('@jupyterlab/buildutils').Build;
  8. // Ensure a clear build directory.
  9. var buildDir = './build';
  10. fs.removeSync(buildDir);
  11. fs.ensureDirSync(buildDir);
  12. fs.copySync('./package.json', './build/package.json');
  13. // Handle the extensions.
  14. var extensions = package_data.jupyterlab.extensions;
  15. var mimeExtensions = package_data.jupyterlab.mimeExtensions;
  16. Build.ensureAssets({
  17. packageNames: Object.keys(mimeExtensions).concat(Object.keys(extensions)),
  18. output: package_data.jupyterlab.outputDir
  19. });
  20. // Create the entry point file.
  21. var source = fs.readFileSync('index.js').toString();
  22. var template = Handlebars.compile(source);
  23. var data = {
  24. jupyterlab_extensions: extensions,
  25. jupyterlab_mime_extensions: mimeExtensions,
  26. };
  27. var result = template(data);
  28. fs.writeFileSync(path.resolve(buildDir, 'index.out.js'), result);
  29. // Create the hash
  30. var hash = crypto.createHash('md5');
  31. hash.update(fs.readFileSync('./package.json'));
  32. var digest = hash.digest('hex');
  33. fs.writeFileSync(path.resolve(buildDir, 'hash.md5'), digest);
  34. module.exports = {
  35. entry: path.resolve(buildDir, 'index.out.js'),
  36. output: {
  37. path: path.resolve(buildDir),
  38. filename: '[name].bundle.js'
  39. },
  40. module: {
  41. rules: [
  42. { test: /\.css$/, use: ['style-loader', 'css-loader'] },
  43. { test: /\.json$/, use: 'json-loader' },
  44. { test: /\.html$/, use: 'file-loader' },
  45. { test: /\.md$/, use: 'raw-loader' },
  46. { test: /\.js$/, use: ['source-map-loader'], enforce: 'pre', exclude: /vega-lite/},
  47. { test: /\.(jpg|png|gif)$/, use: 'file-loader' },
  48. { test: /\.js.map$/, use: 'file-loader' },
  49. { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/font-woff' },
  50. { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/font-woff' },
  51. { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/octet-stream' },
  52. { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' },
  53. { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=image/svg+xml' }
  54. ],
  55. },
  56. node: {
  57. fs: 'empty'
  58. },
  59. bail: true,
  60. devtool: 'cheap-source-map'
  61. }