webpack.config.dev.js 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. const webpack = require('webpack')
  2. const { merge } = require('webpack-merge')
  3. const MiniCssExtractPlugin = require('mini-css-extract-plugin')
  4. const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin')
  5. process.env.REACT_REFRESH = '1'
  6. const base = require('./webpack.config')
  7. module.exports = merge(base, {
  8. mode: 'development',
  9. // Enable accurate source maps for dev
  10. devtool: 'source-map',
  11. // Load entrypoints without contenthash in filename
  12. output: {
  13. filename: 'js/[name].js',
  14. },
  15. // Load assets without contenthash in filename
  16. module: {
  17. rules: [
  18. {
  19. test: /\.(woff|woff2)$/,
  20. type: 'asset/resource',
  21. generator: {
  22. filename: 'fonts/[name][ext]',
  23. },
  24. },
  25. {
  26. test: /\.(svg|gif|png|jpg|pdf)$/,
  27. type: 'asset/resource',
  28. generator: {
  29. filename: 'images/[name][ext]',
  30. },
  31. },
  32. ],
  33. },
  34. plugins: [
  35. // Extract CSS to a separate file (rather than inlining to a <style> tag)
  36. new MiniCssExtractPlugin({
  37. // Output to public/stylesheets directory
  38. filename: 'stylesheets/[name].css',
  39. }),
  40. new ReactRefreshWebpackPlugin({
  41. exclude: [
  42. /node_modules/, // default
  43. /source-editor/, // avoid crashing the source editor
  44. ],
  45. }),
  46. // Disable React DevTools if DISABLE_REACT_DEVTOOLS is set to "true"
  47. process.env.DISABLE_REACT_DEVTOOLS === 'true' &&
  48. new webpack.DefinePlugin({
  49. __REACT_DEVTOOLS_GLOBAL_HOOK__: '({ isDisabled: true })',
  50. }),
  51. ].filter(Boolean),
  52. devServer: {
  53. // Expose dev server at www.dev-overleaf.com
  54. host: '0.0.0.0',
  55. port: parseInt(process.env.PORT, 10) || 3808,
  56. client: {
  57. webSocketURL: 'auto://0.0.0.0:0/ws',
  58. },
  59. hot: true,
  60. allowedHosts: '.dev-overleaf.com',
  61. setupMiddlewares(middlewares, devServer) {
  62. devServer.app.get('/status', (req, res) => res.send('webpack is up'))
  63. return middlewares
  64. },
  65. },
  66. // Customise output to the (node) console
  67. stats: {
  68. colors: true, // Enable some coloured highlighting
  69. // Hide some overly verbose output
  70. performance: false, // Disable as code is uncompressed in dev mode
  71. hash: false,
  72. version: false,
  73. chunks: false,
  74. modules: false,
  75. // Hide copied assets from output
  76. excludeAssets: [
  77. /^js\/ace/,
  78. /^js\/libs/,
  79. /^js\/cmaps/,
  80. /^js\/standard_fonts/,
  81. ],
  82. },
  83. })