# 前端项目检查清单

由 [@hylerrix](https://github.com/hylerrix)提供， 基于： [Node Best Practices](https://github.com/goldbergyoni/nodebestpractices)

```checklist
- Node.js 项目检查清单
  - 项目结构实践
    - 组件式构建你的解决方案
    - 分层设计组件，保持 Express 在特定的区域
    - 封装公共模块成为 NPM 的包
    - 分离 Express 'app' and 'server'
    - 使用易于设置环境变量、安全和分级的配置
  - 错误处理最佳实践
    - 使用 Async-Await 和 promises 用于异步错误处理
    - 仅使用内建的错误对象
    - 区分运行错误和程序设计错误
    - 集中处理错误，不要在Express中间件中处理错误
    - 对 API 错误使用 Swagger 文档化
    - 当一个特殊的情况产生，停掉服务是得体的
    - 使用一个成熟的日志工具提高错误的可见性
    - 使用你最喜欢的测试框架测试错误流
    - 使用 APM 产品发现错误和宕机时间
    - 捕获未处理的 promise rejections
    - 快速查错，验证参数使用一个专门的库
  - 编码风格实践
    - 使用ESLint
    - Node.js 特定的插件
    - 在同一行开始一个代码块的大括号
    - 不要忘记分号
    - 命名您的方法
    - 变量、常量、函数和类的命名约定
    - 使用 const 优于 let，废弃 var
    - 先 require, 而不是在方法内部
    - require 文件夹，而不是文件
    - 使用 === 操作符
    - 使用 Async Await, 避免回调
    - 使用 (=>) 箭头函数
  - 测试和总体的质量实践
    - 至少，编写 API（组件）测试
    - 使用一个 linter 检测代码问题
    - 仔细挑选您的持续集成（CI）平台
    - 经常检查易受攻击的依赖
    - 测试标签化
    - 检查测试覆盖率，它有助于识别错误的测试模式
    - 检查过期的依赖包
    - 对于 e2e testing，使用 docker-compose
  - 上线实践
    - 监控!
    - 使用智能日志增加透明度
    - 委托可能的一切（例如：gzip，SSL）给反向代理
    - 锁住依赖
    - 使用正确的工具保护进程正常运行
    - 利用 CPU 多核
    - 创建一个“维护端点”
    - 使用 APM 产品发现错误和宕机时间
    - 使您的代码保持生产环境就绪
    - 测量和保护内存使用
    - Node 外管理您的前端资源
    - 保持无状态，几乎每天都要停下服务器
    - 使用自动检测漏洞的工具
    - 在每一个 log 语句中指明 ‘TransactionId’
    - 设置 NODE_ENV=production
    - 设计自动化、原子化和零停机时间部署
  - 安全最佳实践
    - 拥护 linter 安全准则
    - 使用中间件限制并发请求
    - 把机密信息从配置文件中抽离出来，或者使用包对其加密
    - 使用 ORM/ODM 库防止查询注入漏洞
    - 通用安全最佳实际集合
    - 调整 HTTP 响应头以加强安全性
    - 经常自动检查易受攻击的依赖库
    - 避免使用 Node.js 的 crypto 库处理密码，使用 Bcrypt
    - 转义 HTML、JS 和 CSS 输出
    - 验证传入的JSON schemas
    - 支持黑名单的 JWT
    - 限制每个用户允许的登录请求
    - 使用非 root 用户运行 Node.js
    - 使用反向代理或中间件限制负载大小
    - 避免 JavaScript 的 eval 声明
    - 防止恶意 RegEx 让 Node.js 的单线程过载执行
    - 使用变量避免模块加载
    - 在沙箱中运行不安全代码
    - 使用子进程时要格外小心
    - 隐藏客户端的错误详细信息
    - 对 npm 或 Yarn，配置 2FA
    - 修改 session 中间件设置
    - 通过显式设置进程应崩溃的情况，以避免 DOS 攻击
```
