Open yanlele opened 4 years ago
因为搭建的是node项目, 所以比前端项目搭建要简单很多。
从以下因素考虑
.yarnrc 、.npmrc
.gitignore
这个问题比较简单没有什么好说的, 推荐 yarn , 如果是非常复杂的项目, 推荐使用 yarn/workSpace + lerna 组合拳, 爽歪歪。
.yarnrc:
.yarnrc
registry "https://registry.npm.taobao.org"
npmrc:
npmrc
registry = https://registry.npm.taobao.org
.gitignore:
# See https://help.github.com/ignore-files/ for more about ignoring files. # dependencies node_modules/ # testing coverage/ /doc/ /mock2easy/ # production /build /coverage worker/ # misc .DS_Store .env.local .env.development.local .env.test.local .env.production.local .idea .idea/ /packages/**/*.js /packages/**/*.js.map !jest.config.js tempDownload/ npm-debug.log* yarn-debug.log* yarn-error.log* yarn.lock package-lock.json
集成eslint、prettier、recommended .eslintrc.js:
.eslintrc.js
module.exports = { parser: '@typescript-eslint/parser', parserOptions: { ecmaFeatures: { jsx: true, }, project: './tsconfig.json', }, plugins: ['@typescript-eslint'], extends: [ 'prettier', 'prettier/@typescript-eslint', 'plugin:@typescript-eslint/recommended', 'plugin:@typescript-eslint/eslint-recommended', 'plugin:@typescript-eslint/recommended-requiring-type-checking', 'plugin:prettier/recommended', ], env: { node: true, browser: false, }, rules: { '@typescript-eslint/no-var-requires': 1, '@typescript-eslint/explicit-function-return-type': 2, '@typescript-eslint/explicit-member-accessibility': 2, 'no-unused-vars': 2, semi: [2, 'always', { omitLastInOneLineBlock: true }], }, };
.prettierrc:
.prettierrc
{ "singleQuote": true, "trailingComma": "all", "printWidth": 140, "semi": true, "bracketSpacing": true, "jsxBracketSameLine": true, "arrowParens": "avoid", "requirePragma": false, "proseWrap": "preserve", "htmlWhitespaceSensitivity": "ignore", "tabWidth": 2 }
集成commitlint - commitlint.config.js:
commitlint
commitlint.config.js
module.exports = { extends: ['@commitlint/config-conventional'], rules: { 'type-enum': [2, 'always', ['feat', 'fix', 'docs', 'style', 'refactor', 'test', 'chore', 'revert']], 'subject-full-stop': [0, 'never'], 'subject-case': [0, 'never'], }, };
每次提交自动检测eslint\commitLint: 可以看这篇文章:使用husky、prettier、lint、commitlint构建规范化项目实践
需要安装的依赖包:yarn add @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli commitizen lint-staged husky --dev
yarn add @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli commitizen lint-staged husky --dev
package.json
{ "scripts": { "type-check": "tsc", "prettier": "prettier --write", "commit": "commit" }, "config": { "commitizen": { "path": "cz-conventional-changelog" } }, "husky": { "hooks": { "pre-commit": "lint-staged", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, "lint-staged": { "**/*.{js,ts,tsx}": [ "yarn prettier", "git add" ], "**/*.{ts,spec.js,tsx}": [ "eslint --fix", "git add" ] } }
装包:yarn add @types/jest jest ts-jest --dev
yarn add @types/jest jest ts-jest --dev
具体可以看看看这个文章: jest测试基础
jest.config.js:
module.exports = { transform: { '^.+\\.tsx?$': 'ts-jest', }, testRegex: '(/__tests__/.*|(\\.|/)(test|spec))\\.(jsx?|tsx?)$', moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], };
tsconfig.json
{ "compilerOptions": { "module": "commonjs", "target": "es6", "noImplicitAny": false, //在表达式和声明上有隐含的any类型时报错 "moduleResolution": "node", "typeRoots": [ "node_modules/@type", "typings/modules", "node_modules" ], "allowJs": true, "emitDecoratorMetadata": true, //给源码里的装饰器声明加上设计类型元数据 "experimentalDecorators": true, //启用实验性的ES装饰器 "importHelpers": true, "removeComments": true, "preserveConstEnums": true, "sourceMap": true, "allowSyntheticDefaultImports": true, // "outDir": "build", "baseUrl": ".", "lib": [ "es6", "dom", "es7" ], "types": [ "node", "@types/jest" ] }, "include": [ "src/**/*" ], "exclude": [ "node_modules/", "src/**/*.spec.ts", "src/**/*.js" ] }
{ "name": "***", "version": "0.0.1", "description": "***", "main": "./src/main.js", "scripts": { "prepare": "npm run tsc", "lint": "eslint --ext .ts ./", "lint:fix": "yarn lint --fix", "type-check": "tsc", "prettier": "prettier --write", "commit": "commit", "test": "jest" }, "config": { "commitizen": { "path": "cz-conventional-changelog" } }, "husky": { "hooks": { "pre-commit": "lint-staged", "commit-msg": "commitlint -E HUSKY_GIT_PARAMS" } }, "lint-staged": { "**/*.{js,ts,tsx}": [ "yarn prettier", "git add" ], "**/*.{ts,spec.js,tsx}": [ "eslint --fix", "git add" ] }, "devDependencies": { "@commitlint/cli": "^8.2.0", "@commitlint/config-conventional": "^8.2.0", "@commitlint/prompt-cli": "^8.2.0", "@types/jest": "^24.0.25", "@types/node": "^13.1.1", "@typescript-eslint/eslint-plugin": "^2.13.0", "@typescript-eslint/parser": "^2.13.0", "commitizen": "^4.0.3", "eslint": "^6.8.0", "eslint-config-prettier": "^6.9.0", "eslint-plugin-prettier": "^3.1.2", "husky": "^3.1.0", "jest": "^24.9.0", "lint-staged": "^9.5.0", "prettier": "^1.19.1", "ts-jest": "^24.2.0", "typescript": "^3.7.4" } }
总体概括
因为搭建的是node项目, 所以比前端项目搭建要简单很多。
从以下因素考虑
.yarnrc 、.npmrc
.gitignore
装包问题
这个问题比较简单没有什么好说的, 推荐 yarn , 如果是非常复杂的项目, 推荐使用 yarn/workSpace + lerna 组合拳, 爽歪歪。
.yarnrc
:npmrc
:.gitignore
:代码规范
集成eslint、prettier、recommended
.eslintrc.js
:.prettierrc
:集成
commitlint
-commitlint.config.js
:每次提交自动检测eslint\commitLint:
可以看这篇文章:使用husky、prettier、lint、commitlint构建规范化项目实践
需要安装的依赖包:
yarn add @commitlint/cli @commitlint/config-conventional @commitlint/prompt-cli commitizen lint-staged husky --dev
package.json
测试部分
装包:
yarn add @types/jest jest ts-jest --dev
具体可以看看看这个文章: jest测试基础
jest.config.js:
代码构建
tsconfig.json
总结
package.json
参考文章