webpack.config.js 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. const path = require('path');
  2. const HtmlWebPackPlugin = require('html-webpack-plugin');
  3. const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
  4. const isDevelopment = process.env.NODE_ENV !== 'production';
  5. module.exports = {
  6. mode: 'development',
  7. entry: {
  8. app: './src/index.tsx',
  9. 'editor.worker': 'monaco-editor/esm/vs/editor/editor.worker.js',
  10. 'json.worker': 'monaco-editor/esm/vs/language/json/json.worker',
  11. 'css.worker': 'monaco-editor/esm/vs/language/css/css.worker',
  12. 'html.worker': 'monaco-editor/esm/vs/language/html/html.worker',
  13. 'ts.worker': 'monaco-editor/esm/vs/language/typescript/ts.worker'
  14. },
  15. devServer: {
  16. hot: true
  17. },
  18. resolve: {
  19. extensions: ['*', '.js', '.jsx', '.tsx', '.ts']
  20. },
  21. output: {
  22. globalObject: 'self',
  23. filename: '[name].bundle.js',
  24. path: path.resolve(__dirname, 'dist')
  25. },
  26. module: {
  27. rules: [
  28. {
  29. test: /\.(js|jsx|tsx|ts)$/,
  30. exclude: /node_modules/,
  31. use: [
  32. {
  33. loader: require.resolve('babel-loader'),
  34. options: {
  35. presets: ['@babel/preset-env', '@babel/preset-typescript', '@babel/preset-react'],
  36. plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean)
  37. }
  38. }
  39. ]
  40. },
  41. {
  42. test: /\.css$/,
  43. use: ['style-loader', 'css-loader']
  44. },
  45. {
  46. test: /\.ttf$/,
  47. use: ['file-loader']
  48. }
  49. ]
  50. },
  51. plugins: [
  52. new HtmlWebPackPlugin({
  53. template: 'src/index.html'
  54. }),
  55. isDevelopment && new ReactRefreshWebpackPlugin()
  56. ].filter(Boolean)
  57. };