npm start
ビルドのみを実行し bundle.js
を生成する場合(本番用)
npm run build
エディターのインデントなどの設定を合わせる。 各エディタに合わせてプラグインをインストールする必要があります。
環境設定部分の躓いた部分や、どういう構成で動いているのかを書いています。
package.jsonで使ってるライブラリについてなどかいていきます。
npm run dev
npm run dev:lint
で下記全てを実行しています。
npm run start-dev
npm run start-dev:lint
http://localhost:1341/js/bundle.js
※ :lintの場合(process.env.LINT === 'true')はwebpackのeslint-loader
を使って監視するようになっています。
このjsをdev
環境のときだけ読み込むようにしています。
下記のようにejsなどを使ってNODE_ENVの起動時の値によって切り分けています。
<% if (env === 'development') { %>
<script src="//localhost:1341/js/bundle.js"></script>
<% } else { %>
<script src="js/bundle.js"></script>
<% } %>
webpackのHot Module ReplacementでWebフロントエンドを爆速開発
start-server:prd
start-server:dev
portはserver/settings.js
内に書いてます
npm run browser-sync
ev/browser-sync.js
をもとに、bundle.jsに関係ないpostcssなどのファイルが更新された際に自動反映するサーバーを立てています。
server/settings.js
内のportに +1
したportで実際の作業用のサーバーが立ち上がります。
実際にはhttp://localhost:3141/の内容をproxyしています。
"lint:src": "eslint ./src --fix",
"lint:server": "eslint ./server --fix",
src
がフロント側、server
がバックエンド側のeslintを実行します。
npm run dev:lint
を実行するとまとめて2つとも実行されます。
webpack-dev-server.express.js
で、開発環境用のbundle.js
をリロードなしで反映されるように
webpack-dev-middleware
とwebpack-hot-middleware
を使って監視サーバーを立てています。
webpack.app.config.js
で設定を行っています。
plugins: [
new webpack.optimize.OccurrenceOrderPlugin(),
new webpack.HotModuleReplacementPlugin(),
...
loaders: [
{
loaders: [
'react-hot-loader',
'babel-loader'
],
...
webpack側でのhot reloadの設定と合わせて.babel側にも記述しています。
"env": {
"development": {
"plugins": [
["react-transform",
{
"transforms": [
{
"transform": "react-transform-hmr",
"imports": ["react"],
"locals": ["module"]
},
{
"transform": "react-transform-catch-errors",
"imports": ["react", "redbox-react"]
}
]
}
]
]
}
}
OccurenceOrderPlugin
の名前がOccurrenceOrderPlugin
に変更されてるなどの地味な変更があり注意module:{postcss: function(){}}
のようにmodule内にpostcssを書くとエラーが表示される
webpack-contrib/postcss-loader#92
下記のようにpluginsとして追加することで回避する。
plugins: [
new webpack.LoaderOptionsPlugin({
options: {
context: __dirname,
postcss: [
require('autoprefixer'),
require('precss')
]
}
})
]
npm run postcss
postcss.config.js
に使いたいプラグインを記述しています。
precssを使いたいと思ったのですが、postcss-cliを使った場合に
importで読み込まれてる先のファイルを編集した際にwatchが発動しなかったため、
postcss-import
を使うようにして個別で使いたいプラグインを読み込んでいます。
npm run start-server:dev
NODE_ENV=development nodemon -r babel-register --watch server -e js,ejs bin/www --exec 'npm run lint:server && node'
--exec 'npm run lint:server && node'
を設定することによりlintが通らないと実行されないようになっています。