@lintest/cli
Integrated lint and test environment project
Last updated 2 days ago by mornya .
ISC · Repository · Original npm · Tarball · package.json
$ cnpm install @lintest/cli 
SYNC missed versions from official npm registry.

Lintest CLI

version node types downloads license
Copyright 2020. mornya. All rights reserved.

About

Integrated lint and test environment project.

Features

  • TypeScript / ES6+ support with TypeScript.
  • Linting TypeScript / JavaScript codes with ESLint.
  • Testing codes with Jest.
  • All available for Node.js / React.js / Vue.js (Nuxt.js) application

Installation

해당 라이브러리는 글로벌 영역에 설치한다.

npm 대신 yarn 사용시, 프로젝트 루트 경로에 package-lock.json 파일이 존재하면 제거하고 yarn.lock 파일만 참조되도록 한다.

$ npm install -g @lintest/cli
or
$ yarn global add @lintest/cli

Execution

CLI

lintest 환경설정은 프로젝트 루트 경로에 lintest.config.js 파일로 생성하면 된다. 해당 파일이 존재하면 lintest install 명령 수행시 provider항목으로 지정된 디펜던시가 프로젝트에 설치되며, 린트 룰은 해당 디펜던시 설정에 따르게 된다.

// lintest.config.js
module.exports = {
  provider: 'sample',
}

위와 같이 설정하면 lintest install 명령 실행시 @lintest/rules-sample 디펜던시가 프로젝트 내 설치가 되며 lint rule은 해당 디펜던시 내 설정을 따른다.

rules 디펜던시 생성은 아래에서 다룬다.

린트 및 테스트 수행은 CLI로 실행하며, 커맨드라인에서 아래와 같이 실행 할 수 있다.

# 린트 실행시
$ lintest lint [fix|debug]

# 테스트 실행시
$ lintest test [watch|coverage]

린트 및 테스트 환경설정 내용이 필요할 경우 export 명령을 사용하여 환경설정을 참고할 수 있다.
수행결과는 프로젝트 루트 경로에 eslint.config.jsonjest.config.json 파일이 생성된다.
만약 정상적인 출력이 되지 않는다면 debug 파라미터로 확인한다.

$ lintest export [debug]

NPM

NPM 프로젝트에서는 npm run 명령으로 실행되도록 아래와 같이 package.json 파일 내에 설정한다.

{
  "scripts": {
    "lint": "lintest lint",
    "lint:fix": "lintest lint fix",
    "lint:debug": "lintest lint debug",
    "test": "lintest test",
    "test:watch": "lintest test watch",
    "test:coverage": "lintest test coverage"
  }
}

프로젝트 npm install 후에 lintest 업데이트 및 룰 업데이트를 자동으로 수행해 줄 수 있도록 아래와 같이 설정해도 좋다.

exit 0은 lintest가 설치되어 있지 않을 경우, 오류로 인해 다음 프로세스가 동작하지 않는 것을 방지하기 위해 정상종료로 처리하도록 해준다.

{
  "scripts": {
    "postinstall": "lintest install || exit 0",
    "postuninstall": "lintest install || exit 0"
  }
}

Testing

테스트케이스를 수행하기 위해 CLI의 디펜던시로 설치된 jest 바이너리가 실행된다.
테스트 파일은 프로젝트 내 존재하는 *.test.{ts|tsx|js|jsx} 파일들이 테스트 대상이 된다.

Setup files

각 단위 테스트를 수행하기 전 mocking method나 초기 설정을 할 수 있도록 셋업 파일을 추가 할 수 있다. 적용될 테스트 셋업 파일은 아래 목록에서 존재하는 파일을 모두 찾아 사용하게 된다.

자세한 내용은 Jest 관련 문서를 참고.

<rootDir>/src/test/@setup.ts (or .js)
<rootDir>/src/tests/@setup.ts (or .js)
<rootDir>/test/@setup.ts (or .js)
<rootDir>/tests/@setup.ts (or .js)
<rootDir>/test-setup.ts (or .js)

Test Coverage

아래 명령으로 테스트 커버리지 데이터를 프로젝트 내 /coverage 디렉토리에 생성할 수 있다.

lintest test coverage

Lint rules package

Naming

패키지명은 @lintest/rules-{프로바이더명}으로 정의하고 NPM @lintest 조직의 승인을 받아 배포함으로써 CLI에서 해당 패키지를 받아 린트 룰을 적용 할 수 있게 된다.

LintRules 정의

package.json의 "main"으로 설정된 파일(index.js)에 아래와 같은 형태의 lint rule 정의 파일만 필요하다.

  • lintRules 하위 항목의 룰들은 prefix를 붙이지 않아도 된다.

    예를 들어, typescript 항목의 '@typescript-eslint/indent' 룰을 정의할 때 '@typescript-eslint/'는 굳이 붙여주지 않아도 'typescript' 항목 하위에 'indent'만으로 선언해도 최종 룰은 '@typescript-eslint/indent'로 변환된다.

// index.js

module.exports = {
  lintRules: {
    general: {
      'comma-dangle': 'off',
      'no-console': 'off',
      'no-debugger': 'off',
    },
    typescript: {
      '@typescript-eslint/indent': ['error', 2],
    },
    react: {
      'react/jsx-boolean-value': 'off',
      'jsx-wrap-multilines': 'off', // might be specify no prefix
    },
    vue: {
      'attribute-hyphenation': 'off',
      'vue/html-closing-bracket-spacing': 'off',
      'vue/html-indent': ['error', 2],
      'html-self-closing': 'off',
    },
    unicorn: {
      'escape-case': 'error',
    },
    promise: {
      'promise/valid-params': 'off',
    },
  },
}

Change Log

해당 프로젝트의 변경사항은 CHANGELOG.md 파일 참조.

License

해당 프로젝트의 라이센스는 LICENSE 파일 참조.

Current Tags

  • 2.0.0-beta10                                ...           latest (2 days ago)

11 Versions

  • 2.0.0-beta10                                ...           2 days ago
  • 2.0.0-beta9                                ...           4 days ago
  • 2.0.0-beta8                                ...           5 days ago
  • 2.0.0-beta7                                ...           8 days ago
  • 2.0.0-beta6                                ...           8 days ago
  • 2.0.0-beta5                                ...           8 days ago
  • 2.0.0-beta4                                ...           10 days ago
  • 2.0.0-beta3                                ...           10 days ago
  • 2.0.0-beta2                                ...           11 days ago
  • 2.0.0-beta1                                ...           12 days ago
  • 2.0.0-beta0                                ...           12 days ago
Maintainers (1)
Downloads
Today 0
This Week 23
This Month 111
Last Day 1
Last Week 88
Last Month 0
Dev Dependencies (4)
Dependents (0)
None

Copyright 2014 - 2017 © taobao.org |