Lerna managent libs (Ⅲ)

Pretty check Source Code & check commited

Posted by lanbery on October 11, 2021

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 ."
    }  
}