Webpackを使用していて、サイトを展開したい。 JavaScriptコードを縮小してバンドルすると、次のエラーが発生します。
解析エラー:予期しないトークン:名前(
Button
)
バンドルされていないコードは次のとおりです。
'use strict';
export class Button { // <-- Error happens on this line
constructor(translate, rotate, text, textscale = 1) {
this.position = translate;
this.rotation = rotate;
this.text = text;
this.textscale = textscale;
}
}
バンドルコードでは、キーワードexport
が削除されています。開発では、エラーはスローされません。ここで、WebPackの私の構成ファイルを見つけることができます。
var webpack = require('webpack');
var PROD = true;
module.exports = {
entry: "./js/entry.js",
output: {
path: __dirname,
filename: PROD ? 'bundle.min.js' : 'bundle.js'
},
module: {
loaders: [
{
test: /\.css$/,
loader: "style-loader!css-loader"
}
]
},
plugins: PROD ? [
new webpack.optimize.UglifyJsPlugin({
compress: {
warnings: false
},
output: {
comments: false,
},
})
] : []
};
PROD
をfalseに変更するとエラーは発生せず、trueの場合は上からエラーが発生します。私の質問は、WebpackでES6を有効にできますか?
これに対する答えをまだ探しているかどうかはわかりませんが、今では glifyjs-webpack-plugin のベータ版をwebpackプラグインとして含めることができ、 glify- es ES6コードを縮小できます。
npm install uglifyjs-webpack-plugin
そして、webpack.config.jsで:
const Uglify = require("uglifyjs-webpack-plugin");
module.exports = {
entry: ...,
output: ...,
plugins: [
new Uglify()
]
};
uglifyjs-webpack-plugin
もES6コードを縮小しないことを知りました。彼らはいくつかのバージョンでそうし始めましたが、使用していたuglify-es
はもはやメンテナンスされていないため、ES6ミニフィケーションをサポートしないuglify-js
にフォールバックしました。詳細 こちら
ES6
コードを縮小する場合は、 terser-webpack-plugin をご覧ください。
terserは、uglify-esおよびuglify-js @ 3とのAPIおよびCLI互換性を保持するuglify-esのフォークです。
NPMでプラグインをインストールします:
npm install terser-webpack-plugin --save-dev
または糸付き:
yarn add -D terser-webpack-plugin
次に、webpack構成のoptimization
セクションにプラグインを追加します。
const TerserPlugin = require('terser-webpack-plugin');
module.exports = {
//...
optimization: {
minimizer: [new TerserPlugin()]
}
};
このデフォルトのwebpack構成を持つ:
> npm list -g uglifyjs-webpack-plugin
+--
| `-- [email protected]
| `-- [email protected]
`-- [email protected]
`-- [email protected]
以下はesnextターゲットで私のために働いた:
npm i -D uglifyjs-webpack-plugin
ローカルになりましたuglifyjs-webpack-plugin:
> npm list uglifyjs-webpack-plugin
`-- [email protected]
webpack.config.js
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
...
plugins: [
//new webpack.optimize.UglifyJsPlugin() @0.4.6 doesn't work
new UglifyJSPlugin() // @1.2.2 works with esnext
]
関連するメンテナーの投稿を参照してください。
[email protected]を使用すると、問題が解決します。
また、私のwebpack.config.jsで
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel-loader',
query: {
presets: [require.resolve('babel-preset-env')]
}
}