Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ESLint、Prettier 详细接入指南 #10

Open
liveKang opened this issue Dec 25, 2018 · 0 comments
Open

ESLint、Prettier 详细接入指南 #10

liveKang opened this issue Dec 25, 2018 · 0 comments

Comments

@liveKang
Copy link
Owner

liveKang commented Dec 25, 2018

ESLint、Prettier 详细接入指南

[TOC]

环境安装

编辑器安装

本文推荐使用 VSCode 编辑器,所有步骤均以 Mac 下 VSCode 为例。

插件安装

安装好编辑器后进行插件安装,shift + command + x 打开 Extensions 面板,搜索安装以下插件。

编辑器配置

User settings

Preferences --> Settings --> open settings.json --> User settings 新增下面的配置。

{
  // ... 
  "eslint.validate": ["javascript", "vue", "html", "javascriptreact"],
  // 关闭自带的 javascript 校验
  "javascript.format.enable": false,
  //保存时eslint自动修复错误
  "eslint.autoFixOnSave": true
}

ESLint 配置文件

项目根目录下新建 .eslintrc.js 文件

React 推荐配置

module.exports = {
	parser: 'babel-eslint',
	extends: ['airbnb', 'prettier', 'plugin:compat/recommended'],
	env: {
		browser: true,
		node: true,
		es6: true
	},
	globals: {
		APP_TYPE: true,
	},
	plugins: ['html'],
	rules: {
		'react/jsx-filename-extension': [1, { extensions: ['.js'] }],
		'react/jsx-wrap-multilines': 0,
		'react/prop-types': 0,
		'react/forbid-prop-types': 0,
		'react/jsx-one-expression-per-line': 0,
		// jsx 统一 tab 4 spaces
		'react/jsx-indent': [0, 'tab'],
		'react/jsx-indent-props': [0, 'tab'],
		'import/no-unresolved': [2, { ignore: ['^@/', '^umi/'] }],
		'import/no-extraneous-dependencies': [2, { optionalDependencies: true }],
		'jsx-a11y/no-noninteractive-element-interactions': 0,
		'jsx-a11y/click-events-have-key-events': 0,
		'jsx-a11y/no-static-element-interactions': 0,
		'jsx-a11y/anchor-is-valid': 0,
		// 禁用分号
		'semi': [2, 'never'],
		// 禁止尾随逗号
		'comma-dangle': [2, 'never'],
		// 强制使用 tab 缩进
		'indent': [2, 'tab']
	},
	settings: {
		polyfills: ['fetch', 'promises', 'url'],
	},
};

Vue 推荐配置

// https://eslint.org/docs/user-guide/configuring

module.exports = {
	root: true,
	parserOptions: {
		parser: "babel-eslint"
	},
	env: {
		browser: true
	},
	globals: {
		scHybridBridge: true
	},
	// https://github.com/vuejs/eslint-plugin-vue#priority-a-essential-error-prevention
	// consider switching to `plugin:vue/strongly-recommended` or `plugin:vue/recommended` for stricter rules.
	extends: ["plugin:vue/essential", "airbnb-base"],
	// required to lint *.vue files
	plugins: ["vue"],
	// add your custom rules here
	rules: {
		// Ensure imports point to a file/module that can be resolved
		"import/extensions": [2, { ignore: [".js", ".json"] }],
		"import/no-unresolved": 0,
		// disallow reassignment of function parameters
		// disallow parameter object manipulation except for specific exclusions
		"no-param-reassign": [
			"error",
			{
				props: true,
				ignorePropertyModificationsFor: [
					"state", // for vuex state
					"acc", // for reduce accumulators
					"e" // for e.returnvalue
				]
			}
		],
		// allow optionalDependencies
		"import/no-extraneous-dependencies": [
			"error",
			{
				optionalDependencies: ["test/unit/index.js"]
			}
		],
		// 禁用分号
		semi: [2, "never"],
		// 禁止尾随逗号
		"comma-dangle": [2, "never"],
		// 强制使用 tab 缩进
		indent: [2, "tab"],
		// 关闭禁用 tab
		"no-tabs": 0,
		// 单行最大长度 200 字符串
		"max-len": [2, { code: 200 }],
		"no-use-before-define": [2, { functions: false, classes: true }],
		// 关闭禁用 ++ 或 --
		"no-plusplus": [0],
		// 关闭使用字面量对象
		"object-shorthand": 0,
		// 关闭函数表达式必须有名字
		"func-names": 0
	}
};

忽略文件配置

在项目根目录下新建 .eslintignore

/script
/functions
/mode_modules
/dist
/.vscode
/.temp
/.circleci
*.ejs
.*
*.json

【注意】项目需要先安装eslint依赖,npm install eslint -D,也可以全局安装sudo npm install eslint -g

Git hooks 集成 ESLint

Git hooks: Git 提供的提交工作流钩子,可在该钩子中执行ESLint代码校验。

集成Git hooks有两种方案,一种利用原生的Git hooks事件,Git钩子

第二种为pre-commit解决方案,具体操作如下:

安装 pre-commit

npm install pre-commit -D

示例 package.json

{
  "name": "changshu-smt-web",
  "version": "1.0.0",
  "description": "",
  "author": "xxx",
  "private": true,
  "scripts": {
    // ...
    // 配置以下三个指令
    "lint": "eslint --fix --ext .js,.vue src",
    "precommit": "npm run lint",
    "precommit-msg": "echo 'Pre-commit checks...'"
  },
  "pre-commit": [
    "precommit-msg",
    "precommit"
  ],
  "dependencies": {
    ...
  },
  "devDependencies": {
    "pre-commit": "^1.2.2",
    ...
  }
  ...
}
名称 说明
lint 指定eslint执行的校验范围,及修复部分问题
precommit 调用lint命令
precommit-msg 开始校验的提示语

其他配置文件参考

.editorconfig

root = true

[*]
charset = utf-8
indent_style = tab
indent_size = 4
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

.prettierrc

{
	"singleQuote": true,
	"trailingComma": "none",
	"printWidth": 100,
	"semi": false,
	"tabWidth": 4,
	"useTabs": true,
	"overrides": [
		{
			"files": ".prettierrc",
			"options": { "parser": "json" }
		}
	]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant