lerna 配置prettier & eslint & mocha
commit check
Prettier Source code
安装依赖包
在项目根目录下执行安装命令
yarn add -D -W prettier eslint eslint-config-prettier eslint-plugin-prettier @typescript-eslint/eslint-plugin @typescript-eslint/parser
eslint-config-prettier 可解决eslint 与 prettier 冲突
增加 eslint 专用tsc配置
解决编译时忽略测试文件,增加tsconfig.lint.json,然后在eslint 配置文件中引入
{
"extends":"./tsconfig.json",
"exclude": ["node_modules"],
"include": ["**/src/**/*.ts", "**/*.js"]
}
配置 eslint
touch .eslintignore
echo -e 'node_modules\n**/lib/**/*.js' > .eslintignore
touch .eslintrc.js
.eslintrc.js
module.exports = {
root: true,
globals: {
Promise: 'readonly',
},
parserOptions: {
project: 'tsconfig.project.json',
ecmaVersion: 2020,
sourceType: 'module', // 让parser按ESM解析
},
parser: '@typescript-eslint/parser',
env: {
node: true,
es2021: true,
mocha: true,
},
plugins: ['@typescript-eslint', 'eslint-plugin-chai-friendly'],
extends: [
'plugin:@typescript-eslint/recommended',
'plugin:prettier/recommended', // 使用eslint-plugin-prettier推荐的配置,注意需要在最后一个
],
overrides: [
{
files: ['**/*.spec.ts'],
rules: {
'no-unused-vars': [
'error',
{
varsIgnorePattern: 'should|expect',
},
],
},
},
],
rules: {
'space-before-function-paren': [
'error',
{ anonymous: 'always', named: 'never', asyncArrow: 'always' },
],
'prettier/prettier': 'error',
'chai-friendly/no-unused-expressions': 0,
},
}
配置Prettier
增加配置文件 .prettierrc.js ```bash touch .prettierignore echo -e “packages//lib \npackages//dist \npackage*.json\ncoverage\n.nyc_output\n” > .prettierignore echo ‘!packages/**/package.json\nnode_modules’ » .prettierignore
```javascript
module.exports = {
semi: false,
trailingComma: 'es5',
singleQuote: true,
tabWidth: 2,
printWidth: 100,
overrides: [
{
files: ['*.html'],
options: {
printWidth: 180,
},
},
],
}
增加script command, 执行yarn pretty 即可格式化code
{
...,
"scripts":{
"pretty": "prettier --write ."
}
}
单元测试增加覆盖率
安装依赖包
yarn add -D -W nyc rimraf
nyc 配置
touch nyc.config.js
module.exports = {
extends: '@istanbuljs/nyc-config-typescript',
'check-coverage': true,
all: true,
include: ['src/**/!(*.spec.*).[tj]s?(x)'],
exclude: ['src/_tests_/**/*.*'],
reporter: ['html', 'lcov', 'clover', 'text', 'text-summary'],
'report-dir': 'coverage',
functions: 80,
lines: 70,
statements: 80,
branches: 60,
}
配置lib package command
在 packages/*/package.json 中增加cov
{
"scripts":{
"prebuild":"rimraf lib coverage .nyc_output", // edit add coverage .nyc_output
"build":"...",
"test":"mocha",
"cov":"npm run build && nyc mocha"
}
}
在Project package.json 中增加 coverage 命令
{
...,
"scripts":{
"coverage":"lerna run cov",
"pretty": "prettier --write ."
}
}