electron + webpack + sass

electronアプリを、reactreduxを使って作ってみようと考えて調べていると、webpackを使った例を結構な頻度で目撃しました。 このwebpackを使って、sassをwebpackでコンパイルして、electronアプリに食わせるとこまでやってみました。


electron + webpack + sass

electronにしてもそうじゃないにしても、sassをコンパイルしてHTMLファイルに引き込む、というのがゴールになると思う。 webpackでCSSをバンドルする場合、通常JSとして扱うことになる(tutorials/getting-started)ようだが、ここでは、sassをコンパイルしてcssファイルとして出力する方法を試した。

パッケージのインストール

次のパッケージをnpmでインストールした。

electronアプリを作るために、

  • electron

webpackを使うために、

  • webpack

webpackでcss、sassを扱うために、

  • css-loader
  • style-loader
  • sass-loader
  • extract-text-webpack-plugin
  • node-sass

ディレクトリ構成

本来は、electronのアプリを作るためのJavascriptソースをどういうディレクトリ構成で配置するか、まで考えたいけど、そこまで整理できないので、あくまでsassのことだけ考えて次のような構成にしてみた。

.
├── build
│   └── css
├── index.html
├── index.js
├── node_modules
├── package.json
└── src
   └── sass
       └── main.scss

webpack.config.js

次に、webpack.config.jsを作ってみる。 src/sass/main.scssをコンパイルして、build/css/style.cssに出力する、という内容としてみた。


const path = require('path')
const ExtractTextPlugin = require('extract-text-webpack-plugin')

module.exports = [
  {
    entry: {
      style: './src/sass/main.scss'
    },
    output: {
      path: path.join(__dirname, 'build/css'),
      filename: '[name].css'
    },
    module: {
      loaders: [
        {
          test: /\.css$/,
          loader: ExtractTextPlugin.extract("style-loader", "css-loader")
        },
        {
          test: /\.scss$/,
          loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader")
        }
      ]
    },
    plugins: [
      new ExtractTextPlugin("[name].css")
    ]
  }
];

webpackでコンパイル

webpackコマンドでコンパイルすると、確かにbuild/css/style.cssとして出来上がっている。


% ./node_modules/webpack/bin/webpack.js
% ls build/css
style.css

このbuild/css/style.cssをindex.htmlに引き込めばよい。

参考


正直electronはどうでもいいっていう内容になってしまいました・・・

モダンなフロントエンド開発は込み入っていますね・・・