webpack.config

以下のようにすることで Vue.js + SCSS でビルドができるようになる。

// Webpack によって CSS も画像(?) もすべて JavaScript に含まれてしまうが、 JS から指定の文字列を抜き出すのに使う
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = [
  {
    // JS
    context: `${__dirname}/src/js`,
    entry: `./index.js`,
    output: {
      path: `${__dirname}/dist/js`,
      filename: 'bundle.js'
    },
    module: {
      loaders: [
        {
          test: /\.js$/,
          loader: 'babel-loader',
          exclude: /node_modules/,
          query: {
            presets: ['es2015']
          }
        },
        {
          test: /\.vue$/,
          exclude: /node_modules/,
          loaders: ['vue-loader'],
        }
      ]
    },
    resolve: {
      extensions: ['.js', '.vue'],
      alias: {
        'vue$': 'vue/dist/vue.esm.js'
      }
    }
  },
  {
    // CSS
    context: `${__dirname}/src/style`,
    entry: './index.scss',
    output: {
      path: `${__dirname}/dist/css`,
      filename: 'app.css'
    },
    module: {
      rules: [
        {
          test: /\.scss$/,
          exclude: /node_modules/,
          use: ExtractTextPlugin.extract({
            fallback: 'style-loader',
            use: ['css-loader', 'postcss-loader', 'sass-loader']
          })
        }
      ],
    },
    plugins: [new ExtractTextPlugin('app.css')],
    resolve: {
      // style-loader 用に .js も必要
      extensions: ['.css', '.scss', '.js']
    }
  }
];

おおよその情報は webpack.config.jsの読み方、書き方 - dackdive’s blog および webpack 3 を使ったウェブページ開発手順 – ラボラジアン より。

extract-text-webpack-plugin は多分認識間違えていないと思う。