J'ai des problèmes avec Webpack 4 sur une machine Linux. La compilation fonctionne bien en mode dev, mais échoue en production. Il semble également fonctionner sur une machine Windows. J'ai essayé de faire déclasser Webpack à une version plus ancienne et rien.
Nodejs: V10.2.1
*TypeError: Cannot read property 'length' of undefined* at node_modules/uglifyjs-webpack-plugin/dist/uglify/index.js:59
this.workers = workers === true ? _os2.default.cpus().length - 1 : Math.min(Number(workers) || 0, _os2.default.cpus().length - 1);
packge.json
{
"name": "webpack-demo",
"version": "1.0.0",
"license": "MIT",
"scripts": {
"build": "webpack -p"
},
"devDependencies": {},
"dependencies": {
"@types/node": "^10.5.1",
"css-loader": "^0.28.11",
"global": "^4.3.2",
"node-sass": "^4.9.1",
"npm": "^6.1.0",
"sass-loader": "^7.0.3",
"style-loader": "^0.21.0",
"ts-loader": "^4.4.2",
"TypeScript": "^2.9.2",
"uglifyjs-webpack-plugin": "1.0.0-beta.2",
"webpack": "^4.15.1",
"webpack-cli": "^3.0.8"
}
}
webpack.config.js
const path = require('path');
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
var webpack = require('webpack');
module.exports = {
entry: './src/index.ts',
devtool: 'source-map',
mode: 'production',
module: {
rules: [{
test: /\.tsx?$/,
use: 'ts-loader',
exclude: /node_modules/
},
{
test: /\.scss$/,
use: ['style-loader', 'css-loader', 'sass-loader'],
exclude: /node_modules/
}
],
},
resolve: {
extensions: ['.tsx', '.ts', '.js','.css','.scss']
},
plugins: [
new UglifyJsPlugin()
],
output: {
path: path.resolve(__dirname, 'dist'),
filename: 'main.js'
}
}
Définir mode
sur production
dans Webpack v4 devrait permettre d'effectuer suffisamment d'optimisations. Il n'est donc pas nécessaire de demander spécifiquement le plug-in Uglify. Essayez de supprimer uglifyjs-webpack-plugin
. De plus, il n'est pas nécessaire de passer l'indicateur -p
pour le script build
.
Si vous souhaitez personnaliser le plug-in Uglify, vous pouvez également le faire dans la configuration optimization
de Webpack, voir https://webpack.js.org/configuration/optimization/
const UglifyJsPlugin = require('uglifyjs-webpack-plugin');
module.exports = {
//...
optimization: {
minimizer: [
new UglifyJsPlugin({ /* your config */ })
]
}
};
Enfin, j’ai une base de base Webpack v4 avec tout le dernier écosystème sur Github, jetez un œil et voyez si cela vous aidera ou non.
Je pouvais le faire fonctionner en désactivant simplement uglify à partir de la version de production.
module.exports = {
optimization:{
minimize: false, // <---- disables uglify.
// minimizer: [new UglifyJsPlugin()] <----- if you want to customize it.
}
}