vue3+ts+EsLint+Prettier規範程式碼的方法實現
阿新 • • 發佈:2021-10-26
目錄
- 使用
- EsLint的使用
- 新增配置檔案
- Prettier的使用
- 使用husky和lint-staged構建程式碼
- 增加setting.on配置
- 參考資料
本文主要介紹在3中使用TypeScript做開發時,如何安裝與配置EsLint和Prettier,以提高編碼規範。
(1)EsLint 提供編碼規範;
(2)Prettier 是一個 Opinionated 的程式碼格式化工具。
使用
EsLint的使用
安裝依賴
npm i -D eslint eslint-plugin-vue @typescript-eslint/parser @typescript-eslint/eslint-plugin
這四個依賴分別是:
- - `eslint`: EsLint的核心程式碼
- - `eslint-plugin-vue`:[為Vue使用Eslint的外掛](https://eslint.vuejs.org/)
- - `@typescript-eslint/parser`:ESLint的解析器,用於解析typescript,從而檢查和規範Typescript程式碼
- - `@typescript-eslint/eslint-plugin`:這是一個ESLint外掛,包含了各類定義好的檢測Typescript程式碼的規範
新增配置檔案
npx eslint --init
根目錄下增加.eslintrc.js檔案。(建議選擇js檔案,json不可以寫註釋) 修改配置檔案
主要是修改rules中的相關配置,具體可檢視官方配置
/*! * https://eslint.boot.com/docs/rules/ * https://eslint.vuejs.org/rules/ * * - 0: off * - 1: warn * - 2: error */ module.exports = { root: true,env: { browser: true,node: true,es6: true },parser: 'vue-eslint-parser',parserOptions: { parser: '@typescript-eslint/parser',ecmaVersion: 2020,sourceType: 'module',jsxPragma: 'React',ecmaFeatures: { jsx: true } },globals: { AMap: false,AMapUI: false },extends: [ 'plugin:vue/vue3-recommended','plugin:@typescript-eslint/recommended'www.cppcns.com,'prettier','plugin:prettier/recommended' ],rules: { '@typescript-eslint/ban-ts-ignore': 'off','@typescript-eslint/explicit-function-return-type': 'off','@typescript-eslint/no-explicit-any': 'off','@typescript-eslint/no-var-requires': 'off','@typescript-eslint/no-empty-function': 'off','vue/custom-event-name-casing': 'off','no-use-before-define': 'off','@typescript-eslint/no-use-before-define': 'off','@typescript-eslint/ban-ts-comment': 'off','@typescript-eslint/ban-types': 'off','@typescript-eslint/no-non-null-assertion': 'off','@typescript-eslint/explicit-module-boundary-types': 'off','@typescript-eslint/no-unused-vars': [ 'error',{ argsIgnorePattern: '^_',varsIgnorePattern: '^_' } ],'no-unused-vars': [ 'error','space-before-function-paren': 'off','vue/name-property-casing': ['error','PascalCase'],// vue/component-definition-name-casing 對元件定義名稱強制使用特定的大小 'vue/attributes-order': 'off','vue/one-component-per-file': 'off','vue/html-closing-bracket-newline': 'off','vue/max-attributes-per-line': 'off','vue/multiline-html-element-content-newline': 'off','vue/singleline-html-element-content-newline': 'off','vue/attribute-hyphenation': 'off','vue/require-default-prop': 'off','vue/script-setup-uses-vars': 'off','vue/html-self-closing': [ 'error',{ html: { void: 'always',http://www.cppcns.com normal: 'never',component: 'always' },svg: www.cppcns.com'always',math: 'always' } ] } }
Prettier的使用
安裝依賴
npm i --save-dev prettier eslint-config-prettier eslint-plugin-prettier
這三個依賴分別是:
- - `prettier`:prettier外掛的核心程式碼
- - `eslint-config-prettier`:解決ESLint中的樣式規範和prettier中樣式規範的衝突,以prettier的樣式規範為準,使ESLint中的樣式規範自動失效
- - `eslint-plugin-prettier`:將prettier作為ESLint規範來使用
新增配置檔案
在專案的根目錄下建立`.prettierrc.js`檔案,並新增如下配置
module.exports = { printWidth: 120,// 換行字串閾值 tabWidth: 2,// 設定工具每一個水平縮排的空格數 useTabs: false,semi: false,// 句末是否加分號 vueIndentScriptAndStyle: true,singleQuote: true,// 用單引號 trailingComma: 'none',// 最後一個物件元素加逗號 bracketSpacing: true,// 物件,陣列加空格 jsxBracketSameLine: true,// jsx > 是否另起一行 arrowParens: 'always',// (x) => {} 是否要有小括號 requirePragma: false,// 不需要寫檔案開頭的 @prettier insertPragma: false // 不需要自動在檔案開頭插入 @prettier }
將Prettier新增到EsLint中
修改`.eslintrc.js`檔案,在extends中增加
'prettier','plugin:prettier/recommended'
其中:
- - `prettier/@typescript-eslint`:使得@typescript-eslint中的樣式規範失效,遵循prettier中的樣式規範
- - `plugin:prettier/recommended`:使用prettier中的樣式規範,且如果使得ESLint會檢測prettier的格式問題,同樣將格式問題以error的形式丟擲
使用husky和lint-staged構建程式碼
安裝依賴
npm i --save-dev husky lint-staged
修改package.json
新增以下程式碼
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},"lint-staged": {
"src*/**/*.ts": [
"prettier --config .prettwww.cppcns.comierrc.js --write","eslint","git add"
],"src*/**/*.json": [
"prettier --config .prettierrc.js --write","git add"
]
}
這樣,在執行git commit時,EsLint會檢查提交的程式碼。
增加setting.json配置
在.vscode資料夾中增加`setting.json`配置檔案,用於自動儲存時,自動修復及檢驗程式碼。
{ "typescript.tsdk": "./node_modules/typescript/lib","typescript.enablePromptUseWorkspaceTsdk": true,"volar.tsPlugin": true,"volar.tsPluginStatus": false,//=========================================== //============= Editor ====================== //=========================================== "explorer.openEditors.visible": 0,"editor.tabSize": 2,"editor.defaultFormatter": "esbenp.prettier-vscode","diffEditor.ignoreTrimWhitespace": false,//=========================================== //============= Other ======================= //=========================================== "breadcrumbs.enabled": true,"open-in-browser.default": "chrome",//=========================================== //============= files ======================= //=========================================== "files.eol": "\n","search.exclude": { "**/node_modules": true,"**/*.log": true,"**/*.log*": true,"**/bower_components": true,"**/dist": true,"**/elehukouben": true,"**/.git": true,"**/.gitignore": true,"**/.svn": true,"**/.DS_Store": true,"**/.idea": true,"**/.vscode": false,"**/yarn.lock": true,"**/tmp": true,"out": true,"dist": true,"node_modules": true,"CHANGELOG.md": true,"examples": true,"res": true,"screenshots": true,"yarn-error.log": true,"**/.yarn": true },"files.exclude": { "**/.cache": true,"**/.editorconfig": true,"**/.eslintcache": true,"**/.hg": true,"**/CVS": true,"**/.DS_Store": true },"files.watcherExclude": { "**/.git/objects/**": true,"**/.git/subtree-cache/**": true,"**/.vscode/**": true,"**/node_modules/**": true,"**/tmp/**": true,"**/bower_components/**": true,"**/dist/**": true,"**/yarn.lock": true },"stylelint.enable": true,"stylelint.packageManager": "yarn","liveServer.settings.donotShowInfoMsg": true,"telemetry.enableCrashReporter": false,"workbench.settings.enableNaturalLanguageSearch": false,"path-intellisense.mappings": { "/@/": "${workspaceRoot}/src" },"prettier.requireConfig": true,"typescript.updateImportsOnFileMove.enabled": "always","workbench.sideBar.location": "left","[react]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[typescript]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[typescriptreact]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[less]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[scss]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"[markdown]": { "editor.defaultFormatter": "esbenp.prettier-vscode" },"editor.codeActionsOnSave": { "source.fixAll.eslint": true },"[vue]": { "editor.codeActionsOnSave": { "source.fixAll.eslint": false } },"cSpell.words": [ "vben","windi","browserslist","tailwindcss","esnext","antv","tinymce","qrcode","sider","pinia","nprogress" ] }
參考資料
Prettier官網
EsLint官網
EsLint Rules
Prettier看這一篇就行了
使用EsLint+Prettier規範TypeScript程式碼
到此這篇關於vue3+ts+EsLint+Prettier規範程式碼的方法實現的文章就介紹到這了,更多相關vue3 ts 規範程式碼內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!