Webpack v1からv2へのマイグレーションメモ
自分が使っていたところだけを簡単に。詳しくはhttps://webpack.js.org/guides/migrating
以下、webpack.config.js
の変更点:
resolve.extenstions
空の文字列は必要なくなったので削除する。ちなみにデフォルトでは.js
、.json
がresolveされている。
// v1 resolve: { extensions: ["", ".js", ".json"], }, // v2 resolve: { extensions: [".js", ".json"], },
拡張子を指定することで./foo
がjs
ファイルならばrequire("./foo")
が可能になる。
module.loaders
とmodule.rules
module.loader
のシンタックスはまだサポートされているが、module.rules
にかえるほうが望ましい。
// v1 module: { loaders: [ { test: /\.css$/, loader: [ "style-loader", "css-loader?modules=true" ] } ] } // v2 module: { rules: [ { test: /\.css$/, use: [ { "style-loader" }, { "css-loader", options: { module: true } } ] } ] }
loader
のチェイン
複数のloaderを!
でつなげるのはmodule.loaders
オプションでしか使えない。
// v1 module: { loaders: [ { test: /\.css$/, loader: "style-loader!css-loader" } ] } // v2 module: { rules: [ { test: /\.css$/, use: [ "style-loader", "css-loader" ] } ] }
-loader
の省略はできなくなった
loader
指定時に、-loader
を省略することはできなくなった。
// × module: { rules: [ { use: [ "style", "css", "less" ] } ] } // ○ module: { rules: [ { use: [ "style-loader", "css-loader", "less-loader" ] } ] }
json-loader
を指定する必要はなくなった
json-loader
がなくとも、自動的にJSONファイルを読み込む。
// × module: { rules: [ { test: /\.json/, loader: "json-loader" } ] } // ○ module: { rules: [ ] }
module.preLoaders
とmodule.postLoaders
は削除された
// v1 module: { preLoaders: [ { test: /\.js$/, loader: "eslint-loader" } ] } // v2 module: { rules: [ { test: /\.js$/, enforce: "pre", loader: "eslint-loader" } ] }
UglifyJsPlugin
sourceMap
UglifyJsPlugin
のsourceMap
オプションはデフォルトでfalse
になった。sourceMap
が欲しい場合にはtrue
設定する必要がある。
devtool: "source-map", plugins: [ new UglifyJsPlugin({ sourceMap: true }) ]
UglifyJsPlugin
warnings
UglifyJsPlugin
のcompress.warnings
オプションはデフォルトでfalse
になった。warnings
が欲しい場合にはtrue
設定する必要がある。
devtool: "source-map", plugins: [ new UglifyJsPlugin({ compress: { warnings: true } }) ]
UglifyJsPlugin
minimize loaders
UglifyJsPlugin
はloadersをminimizeモードに切り替えなくなった。
loadersのminimize
モードは webpack 3 以降に削除される。
古いloadersとの互換性を保つために、pluginを用いてminimizeモードに切り替えることができる。
plugins: [ new webpack.LoaderOptionsPlugin({ minimize: true }) ]
DedupePlugin
は削除された
webpack.optimize.DedupePlugin
はもう必要ないのでwebpack
の設定から削除する。
OccurrenceOrderPlugin
はデフォルトで設定される
もうわざわざ指定する必要はない。
debug
webpack 1 では、debug
オプションはloadersをdebugモードに切り替える。
loadersのdebug
モードは webpack 3 以降に削除される。
古いloadersとの互換性を保つために、pluginを用いてdebugモードに切り替える。
plugins: [ new webpack.LoaderOptionsPlugin({ debug: true }) ]