You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Webpack打包Express+EJS项目遇多类错误求助

Express+EJS+Webpack打包部署问题解决

问题1:Babel Stage预设已废弃报错

报错核心:Babel 7.0.0-beta.55版本后移除了Stage系列预设,@babel/preset-stage-2不再被支持。

解决步骤:

  1. 卸载废弃的预设包:
npm uninstall @babel/preset-stage-2
  1. 安装替代的Babel插件(对应原stage-2的功能):
npm install @babel/plugin-proposal-decorators @babel/plugin-proposal-function-sent @babel/plugin-proposal-export-namespace-from @babel/plugin-proposal-numeric-separator @babel/plugin-proposal-throw-expressions @babel/plugin-syntax-dynamic-import @babel/plugin-syntax-import-meta @babel/plugin-proposal-class-properties @babel/plugin-proposal-json-strings --save-dev
  1. 修改webpack.config.js中babel-loader的配置,移除@babel/preset-stage-2,替换为对应插件:
module: {
  rules: [
    {
      test: /\.js$/,
      exclude: /(node_modules)/,
      use: {
        loader: 'babel-loader',
        options: {
          presets: ['@babel/preset-env'],
          plugins: [
            ["@babel/plugin-proposal-decorators", { "legacy": true }],
            "@babel/plugin-proposal-function-sent",
            "@babel/plugin-proposal-export-namespace-from",
            "@babel/plugin-proposal-numeric-separator",
            "@babel/plugin-proposal-throw-expressions",
            "@babel/plugin-syntax-dynamic-import",
            "@babel/plugin-syntax-import-meta",
            ["@babel/plugin-proposal-class-properties", { "loose": false }],
            "@babel/plugin-proposal-json-strings"
          ]
        }
      }
    },
    // 其他规则...
  ]
}

问题2:EJS模板中_未定义报错

报错核心:HtmlWebpackPlugin处理EJS模板时默认依赖lodash的_变量,但当前环境未提供该变量。

解决步骤:

  1. 安装lodash依赖:
npm install lodash --save
  1. 修改webpack.config.js中的HtmlWebpackPlugin配置,手动传入_变量:
plugins: [
  new HtmlWebpackPlugin({
    template: './views/index.ejs',
    hash: true,
    templateParameters: {
      _: require('lodash')
    }
  })
]

额外优化建议

  • 你的Webpack配置中target: 'node'是针对Node.js环境打包,无需配置浏览器相关的fallback(如path-browserify、crypto-browserify等),可移除resolve.fallback里的大部分浏览器兼容配置,避免冗余。
  • Express服务器代码打包后,运行时需确保mysql2、express-session等服务端依赖在生产环境可用,建议用externals配置避免打包Node.js核心模块和第三方服务端依赖:
externals: {
  express: 'commonjs express',
  mysql2: 'commonjs mysql2',
  'express-session': 'commonjs express-session',
  // 其他服务端依赖...
}

内容的提问来源于stack exchange,提问作者Anas AitZouinet

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 05:39:54