代码质量工具
在Node.js开发中,代码质量工具是保障项目可维护性和团队协作效率的关键。从静态分析到自动化测试,这些工具帮助开发者快速定位问题并统一代码风格。
静态代码分析工具
ESLint是最流行的JavaScript静态分析工具之一。通过配置规则集,它能实时检测代码中的潜在问题:
// .eslintrc.js 示例配置
module.exports = {
env: {
node: true,
es2021: true
},
extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'],
parser: '@typescript-eslint/parser',
rules: {
'no-console': 'warn',
'semi': ['error', 'always'],
'quotes': ['error', 'single']
}
};
TypeScript编译器本身也提供类型检查功能:
// tsconfig.json 严格模式配置
{
"compilerOptions": {
"strict": true,
"noImplicitAny": true,
"strictNullChecks": true
}
}
代码风格自动化
Prettier可以与ESLint配合使用实现代码自动格式化:
// .prettierrc
{
"printWidth": 100,
"tabWidth": 2,
"singleQuote": true,
"trailingComma": "es5"
}
Husky配合lint-staged可以在Git提交时自动触发检查:
// package.json 配置片段
{
"husky": {
"hooks": {
"pre-commit": "lint-staged"
}
},
"lint-staged": {
"*.{js,ts}": ["eslint --fix", "prettier --write"]
}
}
测试覆盖率工具
Jest配合Istanbul可以生成详细的测试覆盖率报告:
// jest.config.js
module.exports = {
collectCoverage: true,
coverageThreshold: {
global: {
branches: 80,
functions: 85,
lines: 90,
statements: 90
}
}
};
示例测试用例:
// utils.test.ts
import { formatDate } from './utils';
describe('日期格式化', () => {
it('应正确处理时间戳转换', () => {
expect(formatDate(1625097600000)).toBe('2021-06-30');
});
});
依赖关系可视化
使用madge可以生成模块依赖关系图:
npx madge --image graph.svg src/index.ts
depcheck能检测未使用的依赖项:
{
"scripts": {
"check-deps": "depcheck"
}
}
安全漏洞扫描
npm audit是内置的安全检查工具,集成CI流程示例:
# GitHub Actions 配置
name: Security Audit
on: [push]
jobs:
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- run: npm install
- run: npm audit --audit-level=moderate
性能分析工具
Node.js内置的profiler可以生成火焰图:
node --prof app.js
node --prof-process isolate-0xnnnnnnnnnnnn-v8.log > processed.txt
clinic.js提供更直观的诊断工具链:
const clinic = require('clinic');
clinic.doctor({
cmd: 'node server.js',
detectPort: true
}, (err, result) => {
console.log(result);
});
文档生成工具
TypeDoc可以基于TS类型生成API文档:
/**
* 用户服务类
* @remarks
* 处理所有用户相关操作
*/
class UserService {
/**
* 创建新用户
* @param userInfo - 用户信息对象
*/
create(userInfo: UserDTO) {
// ...
}
}
持续集成方案
完整的CI配置示例:
name: Node.js CI
on: [push, pull_request]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- run: npm ci
- run: npm run build
- run: npm test
- run: npm run lint
- run: npm audit --audit-level=critical
代码复杂度监控
使用plato可以可视化代码复杂度:
const plato = require('plato');
plato.inspect(['src/**/*.js'], 'report', {
title: '项目分析',
eslint: require('./.eslintrc')
}, report => {
console.log('分析完成');
});
类型定义检查
对于大型TypeScript项目,类型测试很重要:
// test/types.test.ts
import assert from 'assert';
import { User } from '../src/models';
// 测试类型推断
const testUser: User = {
id: 1,
name: 'test'
};
assert.ok(testUser.name === 'test');
代码重复度检测
jscpd可以检测重复代码块:
{
"jscpd": {
"threshold": 5,
"ignore": ["**/*.spec.ts"]
}
}
现代化工具链整合
完整的工具链配置示例:
// package.json
{
"scripts": {
"prepare": "husky install",
"lint": "eslint . --ext .ts,.js",
"format": "prettier --write .",
"test": "jest --coverage",
"build": "tsc",
"audit": "npm audit --audit-level=moderate",
"check-types": "tsc --noEmit",
"check-deps": "depcheck",
"check": "run-s check-types lint test audit check-deps"
}
}
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn