Vue.jsで開発を始める時につまづいたところ
Vue.jsをさわってみた際に、Vue.js公式のWebpack用ボイラープレートを使って環境構築しようと思ったら、結構つまづいたので記録として残しておきます。
Eslintでめちゃめちゃコケる
1.ESLintの設定ファイルが最新のルールに対応してない
こちらを参考に、ルールを修正してください。 keyword-spacingとかその辺りです。
2.babel-eslintのバグに遭遇する
詳細はこちら
現状の最新版6.0.0-beta.6では解決されているようなので、手動でバージョン指定して入れなおしました。
3.デフォルトでなぜかeslint-plugin-htmlをかませてないので、.vueファイルをlintできない
.vueファイルに対してlintをかけるには、eslint-plugin-htmlを通して読み込む必要があります。 .eslintrcにプラグインを読み込むよう書きます。(デフォルトで書いておいて欲しい…)
以上を踏まえて
.eslintrc.jsをeslint-loaderで読み込ませて、環境によってlintのルール変えたりしているようなのですが、Atomなど各エディターのESLintプラグインではJSでの設定ファイルを読めずエラー表示が毎回出て面倒だったので、シンプルに.eslintrcを読むようにしました。
以上の問題を解決するとこんな感じになりました。
.eslintrc
{
'root': true,
'parser': 'babel-eslint',
'plugins': [
'html'
],
'env': {
'es6': true,
'browser': true,
'node': true
},
'parserOptions': {
'ecmaVersion': 6,
'sourceType': 'module',
'ecmaFeatures': {
'jsx': false
}
},
'rules': {...}
}
webpack.base.conf.js
eslint: {
configFile: './.eslintrc',
formatter: require('eslint-friendly-formatter')
}
ちなみに、Babelを使う際にESLint標準のパーサーだと対応しきれていないようなので、babel-eslintをパーサーに指定しています。
その他
Vuexとvue-routerを併用する時
Vue.js用のFluxライブラリVuexと、ルーターvue-routerを併用しようとするとき、少し問題があったのですが、vuex-router-syncなるもので簡単に解決できたので念のため書いておきます。
問題というのは、vue-routerでVueインスタンスを生成するときに、Vuexで作ったStoreを読み込むことができません。(無理矢理できなくはなかったのですが、あんまり綺麗な解決法ではなかった)
そこで、vuex-router-syncを使うと以下のように書けます。
main.js
import Vue from 'vue'
import { sync } from 'vuex-router-sync'
import Router from 'vue-router'
import App from './App'
import List from './components/List'
import store from './store/'
// debug mode
Vue.config.debug = true
// install router
Vue.use(Router)
// routing
let router = new Router()
router.map({
'/': {
component: List
}
})
// vuex-router-sync
sync(store, router)
// start router
router.start(App, '#app')
やっとコードが書ける〜〜〜
おわり🐶