使用Webpack打包Express+EJS项目遇多类错误求助
Express+EJS+Webpack打包部署问题解决
问题1:Babel Stage预设已废弃报错
报错核心:Babel 7.0.0-beta.55版本后移除了Stage系列预设,@babel/preset-stage-2不再被支持。
解决步骤:
- 卸载废弃的预设包:
npm uninstall @babel/preset-stage-2
- 安装替代的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
- 修改
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的_变量,但当前环境未提供该变量。
解决步骤:
- 安装lodash依赖:
npm install lodash --save
- 修改
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
相关产品推荐
相关产品推荐

