web-dev-qa-db-ja.com

Webpack 4とUglifyプラグイン(TypeError:未定義のプロパティ 'length'を読み取れません)

LinuxマシンでWebpack 4に問題があります。ビルドは開発モードでは問題なく機能しますが、本番環境では失敗します。 Windowsマシンでも動作しているようです。私はウェブパックを古いバージョンにダウングレードして何もしませんでした。

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'
    }
}
5
yacine benzmane

Webpack v4でmodeproductionに設定すると十分な最適化が行われるため、特にUglifyプラグインを必要とする必要はありません。 uglifyjs-webpack-pluginを削除してみてください。buildスクリプトに-pフラグを渡す必要もありません。

Uglifyプラグインをカスタマイズする場合は、Webpackのoptimization構成でも行うことができます。詳細は https://webpack.js.org/configuration/optimization/ を参照してください

const UglifyJsPlugin = require('uglifyjs-webpack-plugin');

module.exports = {
  //...
  optimization: {
    minimizer: [
      new UglifyJsPlugin({ /* your config */ })
    ]
  }
};

最後に、Githubの最新のエコシステムをすべて備えた基本的なwebpack v4スターターボイラープレート 見てみる があり、それが役立つかどうかを確認します

6
tmvnty

プロダクションビルドからuglifyを無効にするだけで機能させることができました。

module.exports = {
    optimization:{
        minimize: false, // <---- disables uglify.
        // minimizer: [new UglifyJsPlugin()] <----- if you want to customize it.
    }
}
1
yacine benzmane