NestJS 7.x 折腾记: (1) 项目初始化及常规提交门禁加入

简介: 系列常规操作,没兴趣的可以跳过这篇水文.写过Angular 2+的小伙伴会有一种天然的熟悉感.因为Nest基本就是同一个思想模式搞得~~

网络异常,图片无法展示
|


前言


系列常规操作,没兴趣的可以跳过这篇水文.


写过Angular 2+的小伙伴会有一种天然的熟悉感.


因为Nest基本就是同一个思想模式搞得~~


实操



安装


npm i -g @nestjs/cli


CLI Help


还是熟悉的模样,极具通用性的CLI,


可以快速创建各种模块和中间件~


linqunhe@crper-MBP  ~/Code  neh                        
Usage: nest <command> [options]
Options:
  -v, --version                                   Output the current version.
  -h, --help                                      Output usage information.
Commands:
  new|n [options] [name]                          Generate Nest application.
  build [options] [app]                           Build Nest application.
  start [options] [app]                           Run Nest application.
  info|i                                          Display Nest project details.
  update|u [options]                              Update Nest dependencies.
  add [options] <library>                         Adds support for an external library to
                                                  your project.
  generate|g [options] <schematic> [name] [path]  Generate a Nest element.
    Available schematics:
      ┌───────────────┬─────────────┐
      │ name          │ alias       │
      │ application   │ application │
      │ class         │ cl          │
      │ configuration │ config      │
      │ controller    │ co          │
      │ decorator     │ d           │
      │ filter        │ f           │
      │ gateway       │ ga          │
      │ guard         │ gu          │
      │ interceptor   │ in          │
      │ interface     │ interface   │
      │ middleware    │ mi          │
      │ module        │ mo          │
      │ pipe          │ pi          │
      │ provider      │ pr          │
      │ resolver      │ r           │
      │ service       │ s           │
      │ library       │ lib         │
      │ sub-app       │ app         │
      │ resource      │ res         │
      └───────────────┴─────────────┘
 linqunhe@crper-MBP  ~/Code  nest new --help 
Usage: nest new|n [options] [name]
Generate Nest application.
Options:
  --directory [directory]                  Specify the destination directory
  -d, --dry-run                            Report actions that would be performed without
                                           writing out results.
  -g, --skip-git                           Skip git repository initialization.
  -s, --skip-install                       Skip package installation.
  -p, --package-manager [package-manager]  Specify package manager.
  -l, --language [language]                Programming language to be used (TypeScript or
                                           JavaScript).
  -c, --collection [collectionName]        Schematics collection to use.
  -h, --help                               Output usage information.


项目初始化


# 初始化项目
# nest-project: 就是你要初始化的项目名
nest new nest-project


网络异常,图片无法展示
|


目录结构解释


├── .eslintrc.js # eslint 规则配置
├── .gitignore # git忽略配置
├── .prettierrc # prettier格式化工具配置
├── README.md # 项目初始化描述文档 
├── nest-cli.json # 脚手架Nest的项目级别配置
├── package.json # 不言而喻
├── src
│   ├── app.controller.spec.ts # 单元测试文件
│   ├── app.controller.ts # controller, 功能接口写这里
│   ├── app.module.ts # 根模块,模块有很清晰的领域概念,可以包含自己的provider,service,也能打包给别人用
│   ├── app.service.ts # Provider,就是提供者,比如数据库数据获取,第三方接口组装
│   └── main.ts # 项目主入口文件
├── test # 单元测试目录
│   ├── app.e2e-spec.ts
│   └── jest-e2e.json
├── tsconfig.build.json # 生产模式ts配置文件,继承tsconfig.json,做了一些其他覆写配置而已
├── tsconfig.json # ts配置文件
└── yarn.lock # 不言而喻


nest默认的单元测试使用的是Jest,亲切友好.


提交门禁配置


提交门禁是一种很好的东东,基本是项目必备的.


业务组那边用的是我们包装过的提交门禁(中文化及规则改动),


系统组就不需要了,直接采用github angular那套提交规范即可.


安装


# @commitlint/cli @commitlint/config-conventional : 校验提交规格的(这套是angular那套)
 # commitizen 可以拦截git cz 触发规则校验提交交互
 # lint-staged 可以给git暂存区特定文件设置执行规则,比如ts走tslint,所有文件prettier
 # husky 可以拦截git钩子做一些事情,比如提交记录拦截去执行校验
 yarn add @commitlint/cli @commitlint/config-conventional commitizen lint-staged husky


配置(package.json)


配置支持分离式加载(比如.lintstagedrc,YAML!)和package.json


package.json不是很丰满的情况下,我更倾向于写在里面


{
  "name": "xxx-bff-core",
  "version": "0.0.1",
  "description": " xxxx 3.0 BFF",
  "author": {
    "email": "linqh@xxxx.com",
    "name": "linqunhe"
  },
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "prebuild": "rimraf dist",
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "cross-env NODE_ENV=development nest start --watch",
    "start:debug": "cross-env NODE_ENV=development nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json",
    "pm2start": "npm run build && pm2 start ecosystem.config.js",
    "commit": "git cz" # yarn commit 或者npm run commit可以唤醒交互式提交
  },
  "husky": {
    "hooks": {
      "pre-commit": "lint-staged", # 准备提交的时候执行lint-staged的逻辑,看下面
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS "  # lint-staged过了之后再校验提交规格!
    }
  },
  "lint-staged": { # 校验哪些文件走规则,这里就是所有js相关的先格式化再eslint规范化
    "src/**/*.{js,ts,tsx,jsx}": [
      "prettier --write",
      "eslint --fix"
    ]
  },
  "commitlint": { # commitlint提交规则配置
    "extends": [
      "@commitlint/config-conventional"
    ]
  }
}


效果图


这样提交的commit可读性很强


网络异常,图片无法展示
|



网络异常,图片无法展示
|


目录
相关文章
|
1月前
|
前端开发 JavaScript Java
若依部署上线之后验证码不显示的解决方法之一
若依部署上线之后验证码不显示的解决方法之一
141 0
|
2月前
|
JSON 前端开发 测试技术
接口管理测试繁琐复杂?何不试试Eolink
接口管理测试繁琐复杂?何不试试Eolink
25 0
|
6月前
|
缓存 小程序 前端开发
【易售小程序项目】请求包创建+登录功能实现【基于若依管理系统开发】
【易售小程序项目】请求包创建+登录功能实现【基于若依管理系统开发】
62 0
|
11月前
|
测试技术 Android开发
Magisk模块-神仙自动救砖-防冻版(玩机必备)
模块功能 由某些面具模块导致你手机无法开机的情况,刷入该模块后,你无需手动任何设置自动帮你禁用所有面具模块,让你成功开机。 效果:加入完整测试用例,模块块非常稳定,现有代码不要随意更改,有测试安装10和安卓11。
3934 0
Magisk模块-神仙自动救砖-防冻版(玩机必备)
|
12月前
|
消息中间件 JavaScript 小程序
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
接了个变态需求:给定一个接口,要用户自定义动态实现并上传热部署,怎么搞?
【宜搭】使用远程API手动或者默认设置中英文(顺便吐槽一下需求提了还浪费时间,因为根本不会做)
在钉钉中使用宜搭,如果是自己发布的应用没有切换语言的按钮。必须到宜搭首页进行切换。这对外贸或者其他有英文需求的行业不是很友好。尤其是上下级组织分发的应用,切换一下语言需要跑到上级组织工作台点一下语言切换才能变为英文。 为此提了需求希望宜搭优化一下,但是然并卵。无用。
【宜搭】使用远程API手动或者默认设置中英文(顺便吐槽一下需求提了还浪费时间,因为根本不会做)
|
Oracle IDE Java
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
270 0
最详细的Android开发环境配置经验分享(包含配置过程中可能出现的问题及解决办法。繁琐的配置步骤是否是你头疼呢,详细配置步骤你值得拥有!)
|
前端开发
前端工作总结243-uni-修改添加时间的逻辑
前端工作总结243-uni-修改添加时间的逻辑
88 0
|
前端开发
前端工作总结113-点击按钮报错--bug修复--直接写接口里面
前端工作总结113-点击按钮报错--bug修复--直接写接口里面
64 0
|
JavaScript 前端开发 算法
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。
测试圈相亲平台开发流程 (2): vue和django 初始化,打通联调。