webpack: Webpack fails in production mode while running uglifyjs-webpack-plugin
Do you want to request a feature or report a bug? BUG
What is the current behavior? Execution fails in production mode while using minimiser (aka uglifyjs-webpack-plugin). If I use the default one (not specifying any option in optimization.minimizer), bundling fails with no error information:
ERROR in bundle-prod.js from UglifyJs
undefined
If I specify the latest version of uglifyjs-webpack-plugin like this:
optimization: {
minimizer: [new UglifyJsPlugin()]
},
It fails with:
ERROR in bundle-prod.js from UglifyJs
TypeError: Cannot read property 'replace' of undefined
at make_string (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5645:19)
at encode_string (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5689:19)
at Object.print_string (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6107:27)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6396:16)
at doit (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6168:13)
at AST_Directive.eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6175:13)
at AST_Directive.AST_Node.print (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5425:18)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6438:22)
at Array.forEach (<anonymous>)
at display_body (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6429:14)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6478:17)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5923:19)
at OutputStream.with_indent (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5888:38)
at Object.with_block (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5922:9)
at print_bracketed (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6477:20)
at AST_Function.eval [as _do_print] (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6597:9)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6600:14)
at doit (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6168:13)
at AST_Function.eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6175:13)
at AST_Function.AST_Node.print (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5425:18)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:7111:21)
at Array.forEach (<anonymous>)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:7109:15)
at Object.with_square (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5942:19)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:7106:16)
at doit (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6168:13)
at AST_Array.eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6175:13)
at AST_Array.AST_Node.print (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5425:18)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6992:22)
at Array.forEach (<anonymous>)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6990:23)
at Object.with_parens (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5934:19)
at eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6989:16)
at doit (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6168:13)
at AST_Call.eval (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:6175:13)
at AST_Call.AST_Node.print (eval at <anonymous> (D:\natha\Documents\WebstormProjects\aziende-nostrane-ticino\ant-api\node_modules\uglify-es\tools\node.js:21:1), <anonymous>:5425:18)
If the current behavior is a bug, please provide the steps to reproduce. Run webpack in production mode using the following configuration:
// webpack.common.js
module.exports = {
entry: './src/bin/www.ts',
target: 'node',
node: {
__filename: true,
__dirname: true
},
module: {
rules: [
{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
}
]
},
resolve: {
modules: ['node_modules'],
extensions: ['.tsx', '.ts', '.js']
},
externals: ['pg-hstore', 'tedious']
};
// webpack.prod.js
const merge = require('webpack-merge');
const common = require('./webpack.common');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
const Dotenv = require('dotenv-webpack');
const path = require('path');
module.exports = merge(common, {
mode: "production",
devtool: false,
plugins: [
new Dotenv({
path: './.env.prod'
})
],
optimization: {
minimizer: [new UglifyJsPlugin({sourceMap: true})]
},
output: {
filename: 'bundle-prod.js',
path: path.resolve(__dirname, 'dist')
}
});
Not sure if it has anything to do (maybe a problematic dependency…) but here is my package.json:
{
"name": "ant-api",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./dist/bundle.js",
"watch": "webpack --config webpack.dev.js",
"build": "webpack --config webpack.prod.js",
"test": "jasmine"
},
"dependencies": {
"bcrypt": "^3.0.0",
"bluebird": "^3.5.1",
"cookie-parser": "~1.4.3",
"cors": "^2.8.4",
"debug": "^3.1.0",
"dotenv": "^6.0.0",
"dotenv-webpack": "^1.5.7",
"express": "~4.16.0",
"express-auth-parser": "^0.1.2",
"express-fileupload": "^0.4.0",
"express-jwt": "^5.3.1",
"js-sha256": "^0.9.0",
"jsonwebtoken": "^8.3.0",
"moment": "latest",
"morgan": "~1.9.0",
"mysql2": "^1.6.1",
"nyc": "^12.0.2",
"sequelize": "^4.38.0",
"winston": "^3.0.0"
},
"devDependencies": {
"@types/bcrypt": "^2.0.0",
"@types/chai": "^4.1.4",
"@types/cookie-parser": "^1.4.1",
"@types/cors": "^2.8.4",
"@types/debug": "0.0.30",
"@types/dotenv": "^4.0.3",
"@types/express-fileupload": "^0.4.0",
"@types/express-jwt": "0.0.40",
"@types/jsonwebtoken": "^7.2.8",
"@types/mocha": "^5.2.5",
"@types/morgan": "^1.7.35",
"@types/passport-http": "^0.3.6",
"@types/sequelize": "^4.27.24",
"@types/source-map-support": "^0.4.1",
"@types/supertest": "^2.0.5",
"aws-sdk": "^2.295.0",
"chai": "^4.1.2",
"chai-exclude": "^1.0.9",
"chai-shallow-deep-equal": "^1.4.6",
"mocha": "^5.2.0",
"source-map-support": "^0.5.8",
"sqlite3": "^4.0.2",
"supertest": "^3.1.0",
"ts-loader": "^4.4.2",
"typescript": "^3.0.1",
"uglifyjs-webpack-plugin": "^1.3.0",
"webpack": "^4.16.5",
"webpack-cli": "^3.1.0",
"webpack-merge": "^4.1.4",
"webpack-node-externals": "^1.7.2"
}
}
Example repository Clone the following repository: https://github.com/nathanlepori/webpack-uglifyjs-test Follow instruction in the README.md file. What is the expected behavior? Should create the bundle without failing (duh…)
Please mention other relevant information such as the browser version, Node.js version, webpack version, and Operating System.
- No browser involved
- Node v8.11.4
- Webpack v4.16.5
- OS Windows 10
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Comments: 19 (6 by maintainers)
The next major webpack release will use
terser-webpack-plugin
by default. We can’t “fix” it in v4 because this could be a breaking change. If you are affected by this bug, please specifyterser-webpack-plugin
in config.Please try
terser-webpack-plugin
instead@simonestic, https://www.npmjs.com/package/terser-webpack-plugin-legacy
great. I don’t know the cause of this issue, but for the workarounds, I am considering to exclude the problematic module from webpack’s optimization which triggers uglify Will update if I find which package (one of mysql dependencies?!), but I could use help on how to config webpack config’s optimization to exclude that specific module.
if I exclude mysql2 I no longer get this issue. @nathanlepori can you add mysql2 to your webpack config’s extrernals and see if it compiles?
Please use terser-webpack-plugin instead https://github.com/webpack-contrib/terser-webpack-plugin. Thanks for using
webpack
.This bug was fixed in Terser.
Thanks for your report. It would be great if you reduce your issue to a small reproducible example. Best put this example into a github repository together with instructions how to get to the problem.