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可读性很强


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



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


目录
相关文章
|
存储 Serverless
MATLAB实战 | 梯形积分法
在科学实验和工程应用中,函数关系往往是不知道的,只有实验测定的一组样本点和样本值,这时就无法使用integral函数计算其定积分。
730 1
umount: /dev/xvdb1: not mounted 磁盘卸载出现异常
【问题现象】 服务器中执行umount卸载命令时提示磁盘没有挂载 [root@zxj ~]# umount /dev/xvdb1 umount: /dev/xvdb1: not mounted 【问题描述】 最开始接到用户反馈问题描述如下 1)新添加了一块数据盘,把数据盘挂载到了/home 目录下 2)/home 目录下原本是有文件的,导致原本的文件查看不到 【处理过程】 刚开始接到这个反馈,以为只是简单的同一个目录挂载了两个设备导致原本的文件被遮盖,只需要简单的进行umount卸载后挂载的数据盘分区即可。
15466 0
|
安全 文件存储 iOS开发
告别痕迹:远程桌面连接历史和凭据的清零指南
【8月更文挑战第18天】使用远程桌面后,为保障安全隐私,需清除连接历史及凭据。在Windows中,可通过注册表编辑器删除HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default下的MRU键值来清除历史记录;macOS下则需移步至“~/Library/Application Support/Apple/Remote Desktop”删除“Clients.plist”。清除凭据方面,Windows用户应访问“控制面板”中的“凭据管理器”删除相应条目;macOS用户需利用“钥匙串访问”应用找出并移除相关条目。
3298 3
|
机器学习/深度学习 编解码 人工智能
什么样才算好图——从生图模型质量度量方法看模型能力的发展(下)
什么样才算好图——从生图模型质量度量方法看模型能力的发展(下)
766 1
|
Kubernetes Cloud Native Linux
CKAD考试实操指南(一)--- 登顶CKAD:征服考试的完美蓝图
Certified Kubernetes Application Developer (CKAD)是由Linux Foundation和Cloud Native Computing Foundation (CNCF)联合推出的一项专业认证,旨在验证候选人是否具备Kubernetes应用开发者所需的技能、知识和能力。CKAD考试是一个在线的、监考的、基于性能的考试,由一系列需要在命令行中解决的性能型任务(问题)组成,考试时间为2小时。
1419 0
CKAD考试实操指南(一)--- 登顶CKAD:征服考试的完美蓝图
|
存储 缓存 算法
Linux内存管理笔记----TLB
Linux内存管理笔记----TLB
1429 0
|
存储 Linux API
在Linux中,备份策略有哪些?以及如何实现的?
在Linux中,备份策略有哪些?以及如何实现的?
|
机器学习/深度学习 算法
【文献学习】Channel Estimation Method Based on Transformer in High Dynamic Environment
一种基于CNN和Transformer的信道估计方法,用于在高度动态环境中跟踪信道变化特征,并通过实验结果展示了其相比传统方法的性能提升。
224 0
|
存储 编译器 C语言
strlen函数详解
strlen函数详解
597 2
|
数据安全/隐私保护 开发者 iOS开发
iOS-打包上架构建版本一直不出现/正在处理/自动消失
iOS-打包上架构建版本一直不出现/正在处理/自动消失
314 0