ExtractTextPluginでcssファイルを出力する
webpack
のプラグインExtractTextPlugin
を使って、ビルドされたjs
ファイルからstyle
の部分を抽出してcss
ファイルで出力します。
パッケージのインストール
extract-text-webpack-plugin
のパッケージが必要なのでインストールします。
$ npm install --save-dev extract-text-webpack-plugin
webpack.config.jsの修正
webpack.config.js
を修正します。
plugins
と各style
のloader
にextract-text-webpack-plugin
を適用させます。
vue
のコンポーネントでスタイルを指定している場合はそのloader
に対しても適用させます。
vue-router webpackでページごとにファイルを分割するで扱ったように、出力するjs
ファイルを分割する場合は、ExtractTextPlugin
のallChunks
の設定をtrue
にします。
webpack.config.js
const webpack = require('webpack');
const path = require('path');
const ExtractTextPlugin = require('extract-text-webpack-plugin');
module.exports = {
entry: './resources/assets/js/app.js',
output: {
path: __dirname + '/public',
publicPath: '/',
filename: 'js/app.js',
chunkFilename: 'js/[name].chunk.js'
},
module: {
rules: [
{
test: /\.vue$/,
loader: 'vue-loader',
options: {
loaders: {
js: 'babel-loader',
less: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
less: ExtractTextPlugin.extract({
use: ['css-loader', 'postcss-loader', 'less-loader']
})
}
}
},
{
test: /\.js$/,
loader: 'babel-loader',
exclude: /node_modules/
},
{
test: /\.less$/,
loader: ['style-loader', 'css-loader', 'postcss-loader', 'less-loader']
loader: ExtractTextPlugin.extract({
use: ['css-loader', 'postcss-loader', 'less-loader']
}),
exclude: /node_modules/
}
]
},
resolve: {
alias: {
'vue$': 'vue/dist/vue.common.js'
},
modules: [
path.resolve('./resources/assets'),
path.resolve('./node_modules')
]
},
devServer: {
contentBase: __dirname + '/public',
publicPath: '/',
noInfo: true,
historyApiFallback: true
},
plugins: [
new ExtractTextPlugin({
filename: 'css/app.css',
allChunks: true // jsファイルを分割する場合は必ずtrueにする
})
]
};