zukucode
主にWEB関連の情報を技術メモとして発信しています。

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と各styleloaderextract-text-webpack-pluginを適用させます。

vueのコンポーネントでスタイルを指定している場合はそのloaderに対しても適用させます。

vue-router webpackでページごとにファイルを分割するで扱ったように、出力するjsファイルを分割する場合は、ExtractTextPluginallChunksの設定を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にする
    })
  ]
};

関連記事

  • webpack lessをImportしてビルドする

    Vue.js lessを使いwebpackでビルドするでvueファイルの中でlessを実装してビルドする方法を紹介しました。htmlやbodyなどに適用するベースのクラスを外部のlessファイルに実装...


  • webpack-dev-serverで開発サーバーを起動する

    webpack-dev-serverで開発サーバーを起動します。ファイルやフォルダ構成などの環境はvueファイル(単一ファイルコンポーネント)をwebpackでビルドで紹介したものと同様とします。we...


  • webpack モジュールのパスを絶対パスで指定する方法

    自分で作成したモジュールをインポートするときはインポートするファイルを基準に相対パスで指定する必要があります。フォルダ構成によっては深く階層を辿らないといけないので、フォルダ構成が変わってしまうと大変...


  • Vue.js lessで外部のlessファイルをImportする

    Vue.js lessを使いwebpackでビルドするで.vueファイル(単一ファイルコンポーネント)のstyleをcssではなくlessで実装して、webpackでビルドをしました。メインカラーなど...


  • Vue.js webpackでHot Module Replacementを行う

    開発サーバー(localhost)の自動リロードで開発を効率化するために、Hot Module Replacement(HMR)の設定を行います。ファイルやフォルダ構成などの環境はwebpack-de...


  • vue-router webpackでページごとにファイルを分割する

    vue-routerでシングルアプリケーションを作成していると、ページ数が増えるにしたがって作成されるjsファイルのファイルサイズもどんどん増えていきます。ページごとにファイルを分割し、そのページがア...


  • Vue.js lessを使いwebpackでビルドする

    .vueファイル(単一ファイルコンポーネント)のstyleをcssではなくlessで実装して、webpackでビルドをします。sassでも以下記事のlessの文言がsassに置き換わるくらいでやり方は...


  • vueファイル(単一ファイルコンポーネント)をwebpackでビルド

    .vueファイル(単一ファイルコンポーネント)をwebpackでビルドする手順を紹介します。バージョンは、Vue.jsは2.x、webpackは2.xです。わかりやすくするため、空のプロジェクトから出...


  • webpack postcssを導入する

    webpackでpostcssを導入してautoprefixerなどを行います。必要なパッケージをインストールします。postcss-loaderはwebpackでpostcssを行うために必要です。...


  • webpack-dev-serverでhttpsでのアクセスを可能にする方法

    webpack-dev-serverでhttpsでのアクセスを可能にする方法を紹介します。外部APIのテストや、メディアデバイスのテストなどで、開発中のlocalhostをhttpsにする必要があると...