webpack v1 => v2 => v3の流れでwebpack.config.jsの仕様がころころ変わってる模様。ここが変わるのは苦しいがさすがにそろそろ安定してくるはず。
DEV_PACKAGES="webpack@3.0.0 path riotjs-loader babel babel-core babel-loader babel-preset-es2015 babel-preset-es2015-riot"
yarn add --dev ${DEV_PACKAGES}
# npm install --save-dev ${DEV_PACKAGES}
yarn add riot
# npm install --save riot
webpack.config.js
var webpack = require('webpack')
const path = require('path')
module.exports = {
entry: './node_assets/javascripts/main.js',
output: {
path: path.resolve(__dirname, 'app/assets/javascripts'),
filename: 'app.bundle.js'
},
module: {
rules: [
{
test: /\.tag$/,
exclude: /node_modules/,
loader: "riotjs-loader",
enforce: "pre",
},
{
test: /\.js[x]?$|\.tag$/,
exclude: /node_modules/,
loader: 'babel-loader',
options: {
presets: ['es2015-riot']
},
}
],
},
plugins: [
new webpack.ProvidePlugin({
riot: 'riot'
})
]
}
- プラットフォーム差の問題でoutputパスを絶対パスで指定するようになったぽい
-
preLoaders
,loaders
設定は廃止されていて、rules
設定に統一されている - riotTagをjavascript変換して、さらにそれをes2015に変換するためには、
riotjs-loader
をpre
で動かす(enforce:"pre"
を指定) -
es2015
にしないと、webpack --optimize-minimize
がエラーになった
webpack
# 以下の警告は出るが、コンパイルはできた
# loaderUtils.parseQuery() received a non-string value which can be problematic, see https://github.com/webpack/loader-utils/issues/56
# parseQuery() will be replaced with getOptions() in the next major version of loader-utils.
webpack --optimize-minimize
# ls -l /path/to/compiled.js
# 圧縮を確認