webpack.config.base.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. // Copyright (c) Jupyter Development Team.
  2. // Distributed under the terms of the Modified BSD License.
  3. import * as path from 'path';
  4. import * as webpack from 'webpack';
  5. const rules = [
  6. { test: /\.css$/, use: ['style-loader', 'css-loader'] },
  7. { test: /\.txt$/, use: 'raw-loader' },
  8. { test: /\.md$/, use: 'raw-loader' },
  9. { test: /\.(jpg|png|gif)$/, use: 'file-loader' },
  10. { test: /\.js.map$/, use: 'file-loader' },
  11. {
  12. test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/,
  13. use: 'url-loader?limit=10000&mimetype=application/font-woff'
  14. },
  15. {
  16. test: /\.woff(\?v=\d+\.\d+\.\d+)?$/,
  17. use: 'url-loader?limit=10000&mimetype=application/font-woff'
  18. },
  19. {
  20. test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
  21. use: 'url-loader?limit=10000&mimetype=application/octet-stream'
  22. },
  23. { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' },
  24. {
  25. // In .css files, svg is loaded as a data URI.
  26. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  27. issuer: /\.css$/,
  28. use: {
  29. loader: 'svg-url-loader',
  30. options: { encoding: 'none', limit: 10000 }
  31. }
  32. },
  33. {
  34. // In .ts and .tsx files (both of which compile to .js), svg files
  35. // must be loaded as a raw string instead of data URIs.
  36. test: /\.svg(\?v=\d+\.\d+\.\d+)?$/,
  37. issuer: /\.js$/,
  38. use: {
  39. loader: 'raw-loader'
  40. }
  41. }
  42. ];
  43. // Map Phosphor files to Lumino files.
  44. const stylePath = path.join(
  45. path.dirname(require.resolve('@lumino/widgets/package.json')),
  46. 'style'
  47. );
  48. let phosphorAlias = {};
  49. try {
  50. phosphorAlias = {
  51. '@phosphor/algorithm$': require.resolve('@lumino/algorithm'),
  52. '@phosphor/application$': require.resolve('@lumino/application'),
  53. '@phosphor/commands$': require.resolve('@lumino/commands'),
  54. '@phosphor/coreutils$': require.resolve('@lumino/coreutils'),
  55. '@phosphor/disposable$': require.resolve('@lumino/disposable'),
  56. '@phosphor/domutils$': require.resolve('@lumino/domutils'),
  57. '@phosphor/dragdrop$': require.resolve('@lumino/dragdrop'),
  58. '@phosphor/dragdrop/style': stylePath,
  59. '@phosphor/messaging$': require.resolve('@lumino/messaging'),
  60. '@phosphor/properties$': require.resolve('@lumino/properties'),
  61. '@phosphor/signaling': require.resolve('@lumino/signaling'),
  62. '@phosphor/widgets/style': stylePath,
  63. '@phosphor/virtualdom$': require.resolve('@lumino/virtualdom'),
  64. '@phosphor/widgets$': require.resolve('@lumino/widgets')
  65. };
  66. } catch (e) {
  67. // no Phosphor shims required
  68. }
  69. const watch = process.argv.includes('--watch');
  70. module.exports = {
  71. bail: !watch,
  72. module: { rules },
  73. resolve: {
  74. alias: phosphorAlias,
  75. fallback: {
  76. url: false,
  77. buffer: false,
  78. // See https://github.com/webpack/webpack/blob/3471c776059ac2d26593ea39f9c47c1874253dbb/lib/ModuleNotFoundError.js#L13-L42
  79. path: require.resolve('path-browserify'),
  80. process: require.resolve('process/browser')
  81. }
  82. },
  83. watchOptions: {
  84. poll: 500,
  85. aggregateTimeout: 1000
  86. },
  87. plugins: [
  88. new webpack.ProvidePlugin({
  89. process: 'process/browser'
  90. })
  91. ]
  92. };