项目初始化:技术选型与工程搭建

说实话,每次开始一个新项目,最让我头疼的反而不是写代码,而是「选什么」。React 还是 Vue?Vite 还是 Webpack?TypeScript 要不要上?ESLint 和 Prettier 怎么配?

这些问题,我在过去几年里反复纠结过。今天我就把沉淀下来的经验,一次性说清楚。

技术选型:React 还是 Vue?

先别急着站队。我个人的建议是:看团队,看生态,看场景

对于低代码平台组件库这个场景,我倾向于 React。为什么?

  • 组件化思维更纯粹:React 本身就是「一切皆组件」,和组件库的理念天然契合
  • Hooks 生态成熟:自定义 Hooks 可以很好地封装组件逻辑,复用性极强
  • 社区资源丰富:像 Ant Design、Material-UI 这些标杆组件库都是 React 的,参考价值大

当然,如果你团队 Vue 更熟,用 Vue 3 + Composition API 也完全没问题。我在上一个项目里就用了 Vue 3,说实话体验也不错。但这次课程,我选 React。

我的小建议:技术选型没有绝对的对错。如果你还在犹豫,不妨问问自己——团队里谁最熟?未来半年谁维护?选那个大家「用着不难受」的。

使用 Vite 搭建项目

好,技术选型定了。接下来就是搭项目。

以前我用 Create React App,后来换成了 Vite。为什么?因为 Vite 真的快。启动快、热更新快、打包也快。我第一次用 Vite 的时候,差点以为项目没启动成功——因为太快了。

执行以下命令:

npm create vite@latest lowcode-components -- --template react-ts

这条命令会创建一个基于 React + TypeScript 模板的项目。Vite 会自动帮你配好开发服务器、HMR、构建脚本等。

项目结构大概长这样:

lowcode-components/
├── index.html
├── package.json
├── tsconfig.json
├── vite.config.ts
├── src/
│   ├── main.tsx
│   ├── App.tsx
│   └── ...
└── public/
    └── ...

嗯,这里要注意:Vite 默认的入口是 index.html,而不是 src/index.tsx。这和 CRA 不太一样,别搞混了。

配置 TypeScript

TypeScript 配置其实不复杂,但有几个坑我得提醒你。

Vite 生成的 tsconfig.json 已经包含了基础配置,但我们需要做一些调整:

{
  "compilerOptions": {
    "target": "ES2020",
    "useDefineForClassFields": true,
    "lib": ["ES2020", "DOM", "DOM.Iterable"],
    "module": "ESNext",
    "skipLibCheck": true,
    "moduleResolution": "bundler",
    "allowImportingTsExtensions": true,
    "resolveJsonModule": true,
    "isolatedModules": true,
    "noEmit": true,
    "jsx": "react-jsx",
    "strict": true,
    "noUnusedLocals": true,
    "noUnusedParameters": true,
    "noFallthroughCasesInSwitch": true,
    "paths": {
      "@/*": ["./src/*"]
    }
  },
  "include": ["src"],
  "references": [{ "path": "./tsconfig.node.json" }]
}

这里我重点说几个配置:

  • strict: true:一定要开。不开 strict 的 TypeScript,说白了就是带类型注释的 JavaScript,失去了意义
  • paths:配置路径别名。这样你可以用 @/components/Button 代替 ../../components/Button,清爽很多
  • noUnusedLocals / noUnusedParameters:建议开启。我见过太多项目里躺着几十个没用的变量,看着就难受
我曾经踩过的坑:配置了 paths 之后,记得在 vite.config.ts 里也同步配置 resolve.alias,否则 Vite 不认识 @ 符号。别问我怎么知道的……

ESLint 与 Prettier 规范

代码规范这件事,我个人的态度是:能自动化的,绝不手动。ESLint 管逻辑,Prettier 管格式,各司其职。

安装 ESLint

npm install -D eslint @typescript-eslint/parser @typescript-eslint/eslint-plugin eslint-plugin-react eslint-plugin-react-hooks

然后创建 .eslintrc.cjs

module.exports = {
  root: true,
  env: { browser: true, es2020: true },
  extends: [
    'eslint:recommended',
    'plugin:@typescript-eslint/recommended',
    'plugin:react/recommended',
    'plugin:react-hooks/recommended',
  ],
  ignorePatterns: ['dist', '.eslintrc.cjs'],
  parser: '@typescript-eslint/parser',
  parserOptions: {
    ecmaVersion: 'latest',
    sourceType: 'module',
    ecmaFeatures: { jsx: true },
  },
  plugins: ['react', '@typescript-eslint'],
  rules: {
    'react/react-in-jsx-scope': 'off',
    'react/prop-types': 'off',
    '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }],
  },
  settings: {
    react: { version: 'detect' },
  },
};

这里有个关键点:react/react-in-jsx-scope 要关掉。因为 React 17+ 的 JSX 转换不需要显式 import React 了。这个坑我见过好几个人问过。

安装 Prettier

npm install -D prettier eslint-config-prettier eslint-plugin-prettier

创建 .prettierrc

{
  "semi": true,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "printWidth": 100,
  "bracketSpacing": true,
  "arrowParens": "always"
}

然后在 ESLint 配置里加上 prettier:

extends: [
  // ... 其他配置
  'plugin:prettier/recommended', // 放最后
],

为什么要放最后?因为 eslint-config-prettier 会关闭所有和 Prettier 冲突的规则。放最后才能生效。

我的工作流:在 package.json 里加两个脚本——"lint": "eslint src --ext .ts,.tsx""format": "prettier --write src/**/*.{ts,tsx,css}"。每次提交前跑一遍,省心。

整合到 Vite

最后一步,把 ESLint 和 Prettier 集成到 Vite 的开发流程里。

安装 vite-plugin-eslint:

npm install -D vite-plugin-eslint

然后在 vite.config.ts 里配置:

import { defineConfig } from 'vite';
import react from '@vitejs/plugin-react';
import eslint from 'vite-plugin-eslint';
import path from 'path';

export default defineConfig({
  plugins: [
    react(),
    eslint({ lintOnStart: true, cache: false }),
  ],
  resolve: {
    alias: {
      '@': path.resolve(__dirname, './src'),
    },
  },
});

这样配置之后,每次启动开发服务器,ESLint 会自动检查代码。有错误会在终端和浏览器里同时提示,非常直观。

小结

好了,项目初始化这块就讲完了。我们来回顾一下:

步骤 做了什么 关键点
技术选型 选择 React + TypeScript 看团队、看生态、看场景
Vite 搭建 使用 react-ts 模板创建项目 入口是 index.html,不是 src
TypeScript 配置 开启 strict,配置 paths 别名 记得同步 vite.config.ts
ESLint + Prettier 安装配置,集成到 Vite 关掉 react-in-jsx-scope

说实话,这些配置看起来琐碎,但一次配好,后面能省下大量时间。我见过太多项目因为一开始没配好规范,后期代码风格五花八门,改起来想死的心都有。

下一章,我们会正式开始组件开发。到时候这些配置就派上用场了。