Sprint 1 G0 闸门通过 (pnpm install / typecheck / lint / build / turbo 全部 exit 0) 实际完成: - T-A-01 monorepo 根骨架: pnpm-workspace.yaml + turbo.json + 根 package.json - T-A-02 收编原型: apps/web/ 30 个 src/ 文件 (4948 行) 首次入库 - T-A-03 lint/format: eslint flat config (根 + apps/web) + prettier - T-A-23 web-ci.yml: GitHub Actions 4-step CI (typecheck/lint/build/bundle) 勘误 (前置假设错误): - 原型 4948 行 (不是 4114 行) - 原型含 33 个 any + 16 个未用变量 (Sprint 2 修) - 原型从未 commit, 用 cp -r + git add, 不是 git mv 推迟到 Sprint 2+: - T-A-04/05 tsconfig packages 抽离 - T-A-06/07/08 design tokens 抽离 - T-A-09~13 5 基础组件 依赖隔离: - .gitignore 加 11 行 monorepo 规则 - apps/web/.gitignore 补 .npm-cache/next-dev.log - 删除 apps/web 内嵌 .git/ (cp -r 复制时携带) 验证: - pnpm install: 1m55s, 456 packages - typecheck: 0 errors - lint: 0 errors, 49 warnings (any + unused) - next build: 8 routes compiled, 9/9 static pages - turbo run build: 1 successful, 12.9s
67 lines
1.9 KiB
JavaScript
67 lines
1.9 KiB
JavaScript
// Flat config (ESLint 9)
|
||
import js from '@eslint/js'
|
||
import tseslint from 'typescript-eslint'
|
||
import reactPlugin from 'eslint-plugin-react'
|
||
import reactHooks from 'eslint-plugin-react-hooks'
|
||
import jsxA11y from 'eslint-plugin-jsx-a11y'
|
||
import nextPlugin from '@next/eslint-plugin-next'
|
||
|
||
export default [
|
||
{
|
||
ignores: [
|
||
'**/node_modules/**',
|
||
'**/.next/**',
|
||
'**/dist/**',
|
||
'**/build/**',
|
||
'**/coverage/**',
|
||
'**/playwright-report/**',
|
||
'**/test-results/**',
|
||
'**/.turbo/**',
|
||
'admin/**', // 后端 Python 项目,单独有 ruff + mypy
|
||
'data/**',
|
||
'scripts/**',
|
||
'tests/**',
|
||
'前端原型代码/**', // 兼容老路径
|
||
],
|
||
},
|
||
js.configs.recommended,
|
||
...tseslint.configs.recommended,
|
||
{
|
||
files: ['apps/web/**/*.{ts,tsx}'],
|
||
plugins: {
|
||
react: reactPlugin,
|
||
'react-hooks': reactHooks,
|
||
'jsx-a11y': jsxA11y,
|
||
'@next/next': nextPlugin,
|
||
},
|
||
languageOptions: {
|
||
ecmaVersion: 2024,
|
||
sourceType: 'module',
|
||
globals: {
|
||
React: 'readonly',
|
||
JSX: 'readonly',
|
||
},
|
||
},
|
||
settings: {
|
||
react: { version: '19.0' },
|
||
},
|
||
rules: {
|
||
...reactPlugin.configs.recommended.rules,
|
||
...reactHooks.configs.recommended.rules,
|
||
...jsxA11y.configs.recommended.rules,
|
||
...nextPlugin.configs.recommended.rules,
|
||
'react/react-in-jsx-scope': 'off', // React 19 自动 JSX runtime
|
||
'react/prop-types': 'off', // 用 TypeScript
|
||
'@typescript-eslint/no-unused-vars': [
|
||
'warn',
|
||
{ argsIgnorePattern: '^_', varsIgnorePattern: '^_' },
|
||
],
|
||
// Sprint 1 暂记为 warn(原型 33 个 any 列入 Sprint 2 重构)
|
||
'@typescript-eslint/no-explicit-any': 'warn',
|
||
// React 19 + Next 16 的 setState-in-effect 警告
|
||
'react-hooks/set-state-in-effect': 'warn',
|
||
'no-console': ['warn', { allow: ['warn', 'error', 'info'] }],
|
||
},
|
||
},
|
||
]
|