※この記事は2017年6月に書いた記事です。
【webpack】(2018年2月25日現時点で)ES2015 (ES6)のままminifyする方法を新しく書いたのでこちらを参照したほうが幸せになれると思います。
こちらの結論は、webpackv4.0.0
使えということになります。
残念ながらwebpackv4.0.0
には出来ないという方は、
【webpack】(2018年1月現時点で)ES2015 (ES6)のままminifyする方法も書いているので参照されると幸せになれると思います。
以下、記事の概要です。
今(2018年1月)はuglifyjs-webpack-pluginを個別にインストールして
(webpackからuglifyjs-webpack-pluginへの依存だとバージョン古いので)
uglifyOptions: {ecma: 6}
等のオプションをつけるのがスマートな様子です。
https://www.npmjs.com/package/uglifyjs-webpack-plugin#uglifyoptions
初めにwebpack標準のminifyツール
webpackでminifyする場合、通常はwebpackの中のUglifyJsPluginを利用しますね。
(minifyにはAggressiveMergingPluginとかも使いますけど、今回は重要じゃないので詳しいことは端折ります)
ただしこの場合ES5でjavascriptを記述するか、ES5へのトランスパイルが必須になります。
const webpack = require("webpack");
module.exports = {
// ・・・
plugins: [
new webpack.optimize.UglifyJsPlugin()
],
// ・・・
module: {
loaders: [
{
// ・・・
loader: 'babel-loader',
query: {
presets: ['es2015']
}
}
]
}
}
これは、webpack標準が依存しているuglify-jsというライブラリが、ES2015をサポートしていないため
ES5での記述か、トランスパイルが必須になっています。
uglify-jsのES2015サポート版uglify-es
最近(たぶん)、uglify-jsのES2015サポート版uglify-esというパッケージがリリースされました。
これを使えば、ES2015でのminifyができそうですが、現時点でwebpackの標準Pluginには無さそうです。
switch to uglify-es · Issue #33 · webpack-contrib/uglifyjs-webpack-plugin · GitHub
webpackのuglify-esプラグイン
たぶん公式じゃないと思うのですが、uglify-es-webpack-pluginというのがあるようです。
github
npm
これを利用すれば、ES2015のままES5トランスパイスせずminifyできるようです。
npm install
npm -D install uglify-es-webpack-plugin
webpack.config.jsの記述
const UglifyEsPlugin = require('uglify-es-webpack-plugin');
module.exports = {
// ・・・
plugins: [
new UglifyEsPlugin(),
],
// ・・・
}
で、webpack実行したら、ES2015のままminifyされたjsが生成されました。
細かい設定は動くかどうかすらわかりませんが、SourceMapを出すぐらいは出来そうな印象を受けました。
(ES2015でminifyしてもIEは動かないですけどね。)