DEV

webpack + eslint

webpackでeslintを使う場合、eslintとは別に、eslint-loaderをインストールする必要があります。

インストール

$ npm i -D webpack
$ npm i -D webpack-dev-server
$ npm i -D eslint
$ npm i -D eslint-loader

そして、webpack、eslintそれぞれの設定ファイルを作成します。

webpackの設定

下記のように、webpack.config.jsを設定します。 moduleのpreLoadersにeslint-loaderの設定を書きます。moduleは、eslint-loader等の-loaderを省略できます。あと、下の方にあるeslintというところで、eslintの設定ファイルを指定します。eslintrc.jsonとか、.eslintrcというファイル名であれば指定は不要かもです。

module.exports = {
entry: './src/main.js',
output: {
path: __dirname + '/www/js',
filename: 'bundle.js'
},
devServer: {
contentBase: __dirname + '/www',
port: 8080
},
module: {
preLoaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: "eslint"
}
],
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel'
},
{
test: /\.css$/,
loader: "style!css"
}
]
},
plugins: [],
eslint: {
configFile: './.eslintrc'
}
};

eslintの設定

eslintのルールは沢山あって自分でルールを使うかどうか決められますが、AirBnBのルールが人気だし、そういうところに合わせておいて悪いことはないと思うので、基本AirBnBを使います。ただ、Reactとbabelを使っているときに沢山エラーがでたので、ちょっと修正しました。AirBnBのルールを使いつつ、このエラーは出なくてもいいやと思ったら、ルールを無効にして調整してます。まだ、使いだしたばかりなので、単なる一例です。

.eslintrc

{
"extends": "airbnb",
"plugins": [
"react",
"jsx-a11y",
"import"
],
"rules": {
"import/no-extraneous-dependencies": 0
},
"env": {
"browser": true,
"node": true
}
}

jsx拡張子に関するルール

reactはjsxを使いますが、jsxを使っているファイルの拡張子はjsxにしないと、AirBnBルールに怒られます。jsxを使っていないファイルはjsのままだと思うので、拡張子がjsとjsx共に、webpackがjavascriptに対して実行する処理を適用させるようにしてみます。

該当ファイルの拡張子をjsxに変更し、webpack.config.jsを下記のように修正します。

module.exports = {
entry: './src/main.jsx',
output: {
path: __dirname + '/www/js',
filename: 'bundle.js'
},
devServer: {
contentBase: __dirname + '/www',
port: 8080
},
module: {
preLoaders: [
{
test: /\.jsx{0,1}$/,
exclude: /node_modules/,
loader: "eslint"
}
],
loaders: [
{
test: /\.jsx{0,1}$/,
exclude: /node_modules/,
loader: 'babel'
},
{
test: /\.css$/,
loader: "style!css"
}
]
},
plugins: []
};