webpack.config.js 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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: [
  36. "@babel/preset-env",
  37. "@babel/preset-typescript",
  38. "@babel/preset-react"
  39. ],
  40. plugins: [isDevelopment && require.resolve('react-refresh/babel')].filter(Boolean),
  41. }
  42. }
  43. ]
  44. },
  45. {
  46. test: /\.css$/,
  47. use: ["style-loader", "css-loader"]
  48. },
  49. {
  50. test: /\.ttf$/,
  51. use: ['file-loader']
  52. }
  53. ]
  54. },
  55. plugins: [
  56. new HtmlWebPackPlugin({
  57. template: 'src/index.html'
  58. }),
  59. isDevelopment && new ReactRefreshWebpackPlugin(),
  60. ].filter(Boolean)
  61. };