ããã³ãã¨ã³ããã¼ã ã®å³äº¬ã§ãã Vue.js 3 ãå «æä¸æ¬ã«ãªãªã¼ã¹äºå®ã¨ãããã¨ã§ãBASE ã§ããã¼ã¸ã§ã³ã¢ããã«åãã¦å°ãã¥ã¤ã¢ã¯ã·ã§ã³ãå§ãã¦ãã¾ãã Vue.js 3 ã§ã¯å¤ãã®æ©è½ã追å ããéçºã®å¹ ãåºããã¾ãããä¸æ¹ã§åé¤ãéæ¨å¥¨ã¨ãªãæ©è½ãå¤ãé ãæ©ã¾ããã¦ããæ¹ãããã®ã§ã¯ãªãã§ãããããBASE ãããã§ãã
ãã®è¨äºã§ã¯ ESLint ã¨ãã® Vue.js åããã©ã°ã¤ã³ã® eslint-plugin-vue ãå©ç¨ãããdeprecated ã¨ãªãæ©è½ã¸ã®ã¢ããã¼ããç´¹ä»ãã¾ãã
ãªã eslint-plugin-vue ã
ESLint ã«ã¯ Vue.js ã® SFC ã®ããã®ãã©ã°ã¤ã³ã¨ã㦠eslint-plugin-vue ãéçºããã¦ãã¦ãBASE ã§ããããå©ç¨ãã¦ãã¾ãã
ãã®ãã©ã°ã¤ã³ã«ã¯ vue/no-deprecated-
ã§å§ã¾ãã«ã¼ã«ãããã¤ãããã¾ããããã¯éæ¨å¥¨ã«ãªã£ãæ©è½ã使ç¨ãã¦ãããã©ãããæ¤åºããããã®ã«ã¼ã«ã§ãã
ããã¾ã§ã¯ Vue.js 2.6 ã§éæ¨å¥¨ã«ãªã£ã slot
㨠scope
ã«é¢ãã以ä¸ã®ã«ã¼ã«ã®ã¿ã§ããã
- vue/no-deprecated-slot-attribute
- vue/no-deprecated-scope-attribute
- vue/no-deprecated-slot-scope-attribute
ããããæè¿ãªãªã¼ã¹ããéçºã®å§ãããã¦ãã v7.0.0-alpha.x ã§å¤æ°ã®ã«ã¼ã«ã®è¿½å ãè¡ããã¦ãã¾ãã
ä¾ãã° BASE ã®å ´åãVue.js 3 ã®ç§»è¡ã§ç¹ã«èª²é¡ã ã£ãã®ã filter ã®å»æ¢ã§ãã
éé¡ã®å¤æã«å¤ãã® filter ã使ç¨ãã¦ãããããç¯å²ãåºãç½®ãæãæ¹æ³ã模索ãã¦ããã¨ããã§ããã
eslint-plugin-vue ã§ã¯ãããã vue/no-deprecated-filter
ã«ã¼ã«ãé©ç¨ãããã¨ã§æ¤åºãããã¨ã§ãã¾ãã
ãã®ã»ãã«ãå¤æ°ã®ã«ã¼ã«ãç¾å¨é²è¡å½¢ã§è¿½å ããã¦ãã¾ãã ã«ã¼ã«ã®ä¸è¦§ã¯ 7.0.0-alpha.x ã¿ã°ã® docs ãã@ota-meshi ããã«ããæ¥æ¬èªã§ã®è§£èª¬ããåç §ã§ãã¾ãã
- https://github.com/vuejs/eslint-plugin-vue/tree/v7.0.0-alpha.9/docs/rules
- https://qiita.com/ota-meshi/items/ff0d70ef326657249727
BASE ã§ã¯å¤æ°ããã«ã¼ã«ã®ä¸ã§ããç¹ã«å¹æã®å¤§ããã㪠<template>
ã«é¢ããã«ã¼ã«ãä¸å¿ã«è¿½å ãã¦ãããã¨ã«ãã¾ããã
<script>
é¨åã«ã¯ vue-class-component ã使ç¨ãã¦ãããã¨ããããä¸æ¦åªå
ããã¹ãã¨ããã§ã¯ãªãã¨å¤æãã¦ãã¾ãã
Monorepo 㨠GitHub Actions ãå©ç¨ããå¥ã©ã¤ã³ã§ã®ç¶ç¶çãªæ¹ä¿®
ç¾è¡ã® Vue.js 2.x ã§ã®éçºããã¡ããè¡ããã¦ãããããçªç¶ ESLint ã®ã«ã¼ã«ãå¤æ´ããã®ã¯ãã¼ãã«ãé«ãæãããã°ããã®éã¯æ¢åã®ã«ã¼ã«ãå ±åããããã¨ã«ãã¾ããã
ãããå®ç¾ããããã yarn workspace 㧠Monorepo ã¨ã㦠7.0.0-alpha.x ãã¤ã³ã¹ãã¼ã«ããæ®æ®µä½¿ç¨ãã¦ãããã®ã¨ã¯å¥ã®ã«ã¼ã«ãé©ç¨ã§ããããã«ãã¦ãã¾ãã
. âââ packages â âââ eslint-for-vue3 â âââ node_modules â â âââ eslint-plugin-vue // 7.0.0.alpha-x â âââ .eslintrc.js // Vue 3 ã«åããè¨å® â âââ package.json âââ node_modules | ... â âââ eslint â âââ eslint-plugin-vue // æ®æ®µä½¿ã£ã¦ãããã¼ã¸ã§ã³ âââ src // lint ãã対象 âââ .eslintrc.js // æ®æ®µä½¿ã£ã¦ããè¨å® âââ package.json âââ yarn.lock
eslint-for-vue3
ã® package.json
㧠7.0.0-alpha.x ã dependencies
ã«è¿½å ãã¾ããããã¦ããã® Monorepo ã®ã³ã³ããã¹ã㧠ESLint ãå®è¡ãã scripts
ãè¨å®ãã¦ãã¾ãã
{ "name": "@base/eslint-for-vue3", "private": true, "dependencies": { "eslint-plugin-vue": "7.0.0-alpha.9" }, "scripts": { "lint": "eslint -c ./.eslintrc.js --ext .vue ../../src" } }
.eslintrc.js
ã«ã¯æ®æ®µä½¿ç¨ãã¦ããã«ã¼ã«ã«å ãã¦ãvue/no-deprecated-*
ã®ã«ã¼ã«ã追å ãã¦ãã¾ãã
module.exports = { extends: "@baseinc/eslint-config-base", rules: { 'vue/no-deprecated-slot-attribute': 2, 'vue/no-deprecated-scope-attribute': 2, 'vue/no-deprecated-slot-scope-attribute': 2, 'vue/no-deprecated-filter': 2, 'vue/no-deprecated-v-bind-sync': 2, 'vue/no-deprecated-v-on-number-modifiers': 2, 'vue/no-deprecated-events-api': 2, 'vue/no-deprecated-functional-template': 2, 'vue/no-deprecated-html-element-is': 2, 'vue/no-deprecated-vue-config-keycodes': 2, 'vue/no-deprecated-dollar-listeners-api': 2, 'vue/no-deprecated-v-on-native-modifier': 2, 'vue/no-deprecated-dollar-scopedslots-api': 2, } }
ãã®ç¶æ ã§ä»¥ä¸ã®ã³ãã³ãã§ãæ®æ®µä½¿ã£ã¦ãããã®ã¨ã¯å¥ã®ã«ã¼ã«ãé©ç¨ãã ESLint ãå®è¡ã§ãã¾ãã
$ yarn workspace @base/eslint-for-vue3 run lint
対å¿ãçµäºããããã® .eslintrc.js
ãæ®æ®µä½¿ããã®ã«ææ ¼ãããMonorepo ãåé¤ãã¦ãã¾ãã°ãã¨ã®çä»ããç°¡åã§ãã
GitHub Actions ã§ãã¤ãªã¼ãã«ããæ§ç¯ããã¢ããã¼ã·ã§ã³ãé«ãã
ããã³ãã¨ã³ããã¼ã ã§ã¯æ¯æ¥ååæããããã¹ã¿ã³ãã¢ãããã¼ãã£ã³ã°ãè¡ã£ã¦ãããããã«åã㦠ESLint ãå®è¡ãããã㪠GitHub Action ãè¨å®ãã¦ãã¾ããæ¥ã é²æã確èªããæ©ä¼ãè¨ãããã¨ã§ãVue.js 3 ã¸ã®ã¢ããã¼ã·ã§ã³ãé«ããããã«ãã¦ãã¾ãã
name: lint for Vue.js 3 on: schedule: - cron: 0 5 * * * jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v1 with: node-version: '12.x' - uses: actions/cache@v1 with: path: node_modules key: ${{ runner.os }}-lintvue3-${{ hashFiles('**/yarn.lock') }} restore-keys: | ${{ runner.os }}-lintvue3- - run: yarn install --pure-lockfile --ignore-optional --network-concurrency 1 - run: yarn workspace @web/eslint-for-vue3 run lint - if: failure() env: SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }} run: | curl \ -X POST\ --data-urlencode "payload=\ {\ \"text\": \":bomb: Vue.js 3 ããã¢ã: https://github.com/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID} \",\ }"\ ${SLACK_WEBHOOK}
以ä¸ã§ãã
ã¾ã¨ã
ESLint ãå©ç¨ããæ¯è¼çæ°è»½ã«å°å ¥ã§ãã Vue.js 3 ã¸ã®å¯¾å¿æ¹æ³ãç´¹ä»ãã¾ããã ãã¡ãããã®ã¨ã©ã¼ããªããªã£ãããã¨ãã£ã¦ Vue.js 3 ã¸ã®å¯¾å¿ãçµäºããããã§ã¯ããã¾ãããã対å¿ã®ã¨ã£ããããªã©ã«ãªãã°å¹¸ãã§ãã
ã¡ãªã¿ã«ã§ãããç¹ã« Vue.js ã®æ¯çã®é«ããªãã¸ããªã«ãããå®è¡ããçµæã¯ä»¥ä¸ã§ããã
â 500 problems (500 errors)