ESLint的簡單使用方法(js,ts,vue)
一、ESLint介紹
1.為什么要用ESLint
統(tǒng)一團隊編碼規(guī)范(命名,格式等)
統(tǒng)一語法
減少git不必要的提交
減少低級錯誤
在編譯時檢查語法,而不是等js引擎運行時才檢查
2.eslint用法
可以手動下載配置
可以通過vue腳手架創(chuàng)建項目時自動下載
3.ESLint包
安裝方式:
通過npm直接進行全局安裝npm i eslint -D
通過vue腳手架創(chuàng)建項目時選擇安裝eslint模塊包vue create 創(chuàng)建項目時選擇eslint安裝的包
vscode中ESLint擴展工具
二、手動下載配置(js)
1.創(chuàng)建一個測試文件夾:eslint-test
2.初始化項目:npm init -y(創(chuàng)建package.json)
3.直接在項目中安裝eslint包npm i eslint -D
node_modules中下載了很多包,.bin/eslint.cmd腳本文件,內部通過nodejs執(zhí)行eslint運行包的代碼;@eslint包用來規(guī)范eslint配置文件;eslint開頭的包是eslint運行包,包含eslint代碼。
4.生成ESLint配置文件
創(chuàng)建eslint.config.js文件
export default { rules: { "no-unused-vars": "error", "no-console": "error", "no-sparse-arrays": "error", "no-undef": "error", "no-unreachable": "error", "no-dupe-keys": "error" } }
在package.json文件中添加type屬性,添加命令
{ "name": "eslint-test", "version": "1.0.0", "main": "index.js", "type": "module", "scripts": { "lint": "eslint ." }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "eslint": "9.14.0" } }
創(chuàng)建js文件src/index.js
//不允許變量聲明但沒有使用no-unused-vars const name = 'zs' //不允許打印no-console console.log('name'); //不允許數(shù)組中有空元素no-sparse-arrays const arr = [1, , 3] //不允許有未聲明的變量no-undef console.log(afffffff); //不允許函數(shù)return后還有代碼no-unreachable function showFn(toName, fromName) { let a = 0; return a; a = 1 } //不允許對象有重復的key,no-dupe-keys const obj = { name: 'zs', name: 'zs1' }
終端執(zhí)行命令npm run lint規(guī)范代碼
ESLint可以創(chuàng)建獨立的配置文件.eslintrc.js,也可以直接在package.json中配置
a.執(zhí)行node_modules/.bin文件夾里的eslint腳本來創(chuàng)建配置文件
包含完整腳本路徑的命令:'./node_modules/.bin/eslint --init'
也可以用npx來執(zhí)行npxeslint --init
創(chuàng)建配置文件過程中,需要選擇配置
自動生成eslint.config.mjs文件
eslint.config.mjs import globals from "globals"; import pluginJs from "@eslint/js"; /** @type {import('eslint').Linter.Config[]} */ export default [ {files: ["**/*.js"], languageOptions: {sourceType: "commonjs"}}, {languageOptions: { globals: globals.browser }}, pluginJs.configs.recommended, ];
創(chuàng)建js文件,輸入npx eslint 文件名執(zhí)行語法檢查
5.規(guī)范集簡化配置npm i@eslint/js
// export default { // rules: { // "no-unused-vars": "error", // "no-console": "error", // "no-sparse-arrays": "error", // "no-undef": "error", // "no-unreachable": "error", // "no-dupe-keys": "error" // } // } //規(guī)則集 import js from '@eslint/js' export default [js.configs.recommended]
三、手動安裝eslint(ts)
1.創(chuàng)建一個測試文件夾:eslint-ts-test
2.初始化項目:npm init -y(創(chuàng)建package.json)
3.直接在項目中安裝eslint包npm i eslint @eslint/js @typescript-eslint/parser -D
{ "name": "pro", "version": "1.0.0", "main": "index.js", "type": "module", "scripts": { "lint": "eslint ." }, "keywords": [], "author": "", "license": "ISC", "description": "", "devDependencies": { "@eslint/js": "9.14.0", "eslint": "9.14.0", "@typescript-eslint/parser": "8.14.0" } }
4.新建配置文件eslint.config.js文件
import tsPsrser from '@typescript-eslint/parser' export default { //文件配置,哪些文件需要被校驗,忽略eslint.config.js文件 ignores: ["eslint.config.js"], files: ["**/*.ts"], //規(guī)范配置 rules: { "no-unused-vars": "error", "no-console": "error" }, //語言配置 languageOptions: { //指定解析器 parser: tsPsrser } }
5.創(chuàng)建ts文件,src/index.ts
const age=18 console.log(name) /*ts類型定義 *ts相關的校驗,eslint自帶的校驗espress解析器無法識別 *我們需要ts解析器來解析ts代碼,完成類型校驗 */ interface Uesr{ name:string; age:number; }
Parsing error: The keyword 'interface' is reserved
ts相關的校驗,eslint自帶的校驗espress解析器無法識別
我們需要ts解析器來解析ts代碼,完成類型校驗 npm i @typescript-eslint/parser
四、手動安裝eslint(vue)
1.創(chuàng)建一個測試文件夾:eslint-ts-test
2.初始化項目:npm init -y(創(chuàng)建package.json)
3.直接在項目中安裝eslint包npm i eslint @eslint/js @typescript-eslint/parser vue-eslint-parser -D
{ "name": "eslint-test", "version": "1.0.0", "main": "index.js", "type": "module", "scripts": { "lint": "eslint ." }, "keywords": [], "author": "", "license": "ISC", "description": "", "dependencies": { "@eslint/js": "9.14.0", "@typescript-eslint/parser": "8.14.0", "eslint": "9.14.0", "vue-eslint-parser": "9.4.3" } }
4.新建配置文件eslint.config.js文件
import tsParser from '@typescript-eslint/parser' import vueParser from 'vue-eslint-parser' export default { ignores: ["eslint.config.js"], files: ["**/*.ts", "**/*.vue"], rules: { "no-unused-vars": "error", "no-console": "error", "no-sparse-arrays": "error", "no-undef": "error", "no-unreachable": "error", "no-dupe-keys": "error" }, languageOptions: { //指定解析器 parser: vueParser, //解析器的語法parser設置 parserOptions: { parser: tsParser } } }
5.創(chuàng)建vue文件,src/index.vue
<template> </template> <script setup lang="ts"> //不允許變量聲明但沒有使用no-unused-vars const name = 'zs' //不允許打印no-console console.log('name'); //不允許數(shù)組中有空元素no-sparse-arrays const arr = [1, , 3] //不允許有未聲明的變量no-undef console.log(afffffff); //不允許函數(shù)return后還有代碼no-unreachable function showFn(toName, fromName) { let a = 0; return a; a = 1 } //不允許對象有重復的key,no-dupe-keys const obj = { name: 'zs', name: 'zs1' } //類型定義 interface User{ name:string; age:number; } </script>
五、自定義插件
1.rule定義
針對這個規(guī)范的需求,編寫一個rule,原理是通過ast節(jié)點處理來完成
//規(guī)則的本質是一個對象, //eslint插件,必須長得像一個約定好的對象 export const noMiaomiVars = { //插件的元信息 meta: { messages: { noMiaomiVars: "不允許使用miaomi變量" } }, create(context) { return { // 這是一個訪問者模式,訪問到某一個ast的節(jié)點,就進行處理 VariableDeclaration(node) { console.log('VariableDeclaration', node); }, VariableDeclarator(node) { console.log('VariableDeclarator', node); }, Identifier(node) { console.log('Identifier', node); if (node.name == 'miaomi') { context.report({ node, messageId: 'noMiaomiVars', data: { name: node.name } }) } }, Literal(node) { console.log('Identifier', node); } } } }
2.plugin插件定義
將rule進行插件化,提供給外部使用‘
import { noMiaomiVars } from '../rules/no-miaomi-vars.js' export const eslintMiaomiPlugin = { rules: { "no-miaomi-vars": noMiaomiVars } }
3.use將插件引入到eslint配置文件中,使用插件
import tsParser from '@typescript-eslint/parser' import vueParser from 'vue-eslint-parser' import { eslintMiaomiPlugin } from './eslint/plugins/eslint-plugin-miaomi.js' export default { ignores: ["eslint.config.js"], files: ["src/**/*.js", "**/*.ts", "**/*.vue"], plugins: { miaomi: eslintMiaomiPlugin //插件定義好后,插件名稱就是規(guī)則的作用域 }, rules: { "miaomi/no-miaomi-vars": "error", }, languageOptions: { //指定解析器 parser: vueParser, //解析器的語法parser設置 parserOptions: { parser: tsParser } } }
總結
到此這篇關于ESLint的簡單使用的文章就介紹到這了,更多相關ESLint簡單使用內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
復制Input內容的js代碼_支持所有瀏覽器,修正了Firefox3.5以上的問題
今天作一個功能,有一個input,里邊有內容,點一下按鈕就復制里邊的內容到剪貼板2010-06-06JavaScript中通過閉包解決只能取得包含函數(shù)中任何變量最后一個值的問題
JavaScript中解決閉包只能取得包含函數(shù)中任何變量最后一個值的問題2010-08-08深入理解JavaScript系列(16) 閉包(Closures)
本章我們將介紹在JavaScript里大家經常來討論的話題 —— 閉包(closure)。閉包其實大家都已經談爛了。盡管如此,這里還是要試著從理論角度來討論下閉包,看看ECMAScript中的閉包內部究竟是如何工作的2012-04-04JavaScript中數(shù)組隨機排序的實現(xiàn)詳解
這篇文章主要為大家詳細介紹了JavaScript中數(shù)組隨機排序的實現(xiàn),主要是利用原地算法和sort/shuffle算法,感興趣的小伙伴可以跟隨小編一起學習一下2022-11-11