webpack.config.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. var path = require('path');
  2. var ForkTsCheckerWebpackPlugin = require('fork-ts-checker-webpack-plugin');
  3. var cpus = require('os').cpus().length;
  4. var forkCheckerCpus = cpus > 2 ? 2 : 1;
  5. var threadCpus = cpus - forkCheckerCpus;
  6. // Use sourcemaps if in watch or debug mode;
  7. var devtool = 'eval';
  8. if (process.argv.indexOf('--watch') !== -1) {
  9. devtool = 'cheap-module-eval-sourcemap';
  10. }
  11. module.exports = {
  12. resolve: {
  13. extensions: ['.ts', '.tsx', '.js']
  14. },
  15. bail: true,
  16. devtool: devtool,
  17. plugins: [
  18. new ForkTsCheckerWebpackPlugin({
  19. workers: forkCheckerCpus,
  20. checkSyntacticErrors: true
  21. })
  22. ],
  23. module: {
  24. rules: [
  25. { test: /\.tsx?$/, use: [
  26. { loader: 'cache-loader' },
  27. { loader: 'thread-loader', options: {workers: threadCpus} },
  28. { loader: 'ts-loader', options: {happyPackMode: true} },
  29. ]},
  30. { test: /\.js$/,
  31. use: ['source-map-loader'],
  32. enforce: 'pre',
  33. // eslint-disable-next-line no-undef
  34. exclude: path.join(process.cwd(), 'node_modules')
  35. },
  36. { test: /\.css$/, use: ['style-loader', 'css-loader'] },
  37. { test: /\.csv$/, use: 'raw-loader' },
  38. { test: /\.(json|ipynb)$/, use: 'json-loader' },
  39. { test: /\.html$/, use: 'file-loader' },
  40. { test: /\.md$/, use: 'raw-loader' },
  41. { test: /\.(jpg|png|gif)$/, use: 'file-loader' },
  42. { test: /\.js.map$/, use: 'file-loader' },
  43. { test: /\.woff2(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/font-woff' },
  44. { test: /\.woff(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/font-woff' },
  45. { test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/octet-stream' },
  46. { test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader' },
  47. { test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=image/svg+xml' },
  48. ]
  49. },
  50. };