React脚手架+typescript+antd+less+eslint+prettier

3,124 阅读2分钟

React脚手架+typescript+antd+less+eslint+prettier

脚手架创建react项目

npx create-react-app test-react --template typescript
yarn create react-app test-react --template typescript

创建好后的目录结构如下

.
│  .gitignore
│  package.json
│  README.md
│  tree.md
│  tsconfig.json
│  yarn.lock
│  
├─public
│      favicon.ico              除这两个其余均可删除,但index.html中的对其他的引用部分也应删除
│      index.html               其余均可删除
│      logo192.png
│      logo512.png
│      manifest.json
│      robots.txt
│      
└─src
        App.css
        App.test.tsx
        App.tsx
        index.css
        index.tsx
        logo.svg
        react-app-env.d.ts
        reportWebVitals.ts
        setupTests.ts

安装依赖

# 个人习惯用yarn,可自行使用其他工具
yarn add react-router-dom @types/react-router-dom
yarn add antd axios less

# 修改react的配置
yarn add -D customize-cra react-app-rewired

# 使用less
yarn add -D less-loader@6.0.0

# 使用eslint & StandardJS代码规范
yarn add -D eslint@7.11.0 babel-plugin-import eslint-config-standard eslint-loader eslint-plugin-babel eslint-plugin-node eslint-plugin-prettier eslint-plugin-promise eslint-plugin-react

# 使用prettier
yarn add -D prettier

config-overrides.js配置

代理 + 路径别名+ less + antd按需加载

// package.json
...
"scripts": {
    "start": "react-app-rewired start",
    "build": "react-app-rewired build",
    "test": "react-app-rewired test"
  },
// config-overrides.js
const path = require('path')
const {
  override,
  addLessLoader,
  addWebpackAlias,
  overrideDevServer,
  fixBabelImports
} = require('customize-cra')

// 配置代理
const proxy = {
  '/api': {
    target: 'http://xxx:3000',
    changeOrigin: true
  }
}
const devServerConfig = () => config => {
  return {
    ...config,
    proxy
  }
}

// 修改端口号
process.env.PORT = 3031

module.exports = {
  webpack: override(
    addWebpackAlias({
      // 路径别名,还需要配置tsconfig.json、tsconfig-base.json,在后面,可配置多个路径别名
        '@': path.resolve(__dirname, 'src/')
    }),
    // antd按需加载
    fixBabelImports('import', { 
      libraryName: 'antd',
      libraryDirectory: 'es',
      style: true // 支持less
    }),
    // 配置less
    addLessLoader({
      lessOptions: {
        javascriptEnabled: true // 启用支持内联javascript
        //  localIdentName: '[local]--[hash:base64:5]'
      }
    })
  ),
  devServer: overrideDevServer(devServerConfig()) 
}

路径别名

// tsconfig-base.json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}
// tsconfig.json
{
    // 加入下面这一行就行
    "extends": "./tsconfig-base.json", 
    ...
}

eslint

# 创建eslint规范文件
npx eslint --init
# 下面是eslint配置选项的选择,安装完成后会出现.eslintrc.json文件
--To check syntax only
--Javascript moduless (import/export)
--React
--... use Typescript? Yes
--按一下a键,全选
--JSON
--Yes
// .eslintrc.json
// 写入以下内容,使用的是standardjs标准
{
    "env": {
        "browser": true,
        "es2021": true,
        "node": true
    },
    "globals": {
        "JSX": "readonly",
        "React": "readonly",
        "NodeJS": "readonly"
    },
    "extends": [
        "plugin:react/recommended",
        "standard"
    ],
    "parser": "@typescript-eslint/parser",
    "parserOptions": {
        "ecmaFeatures": {
            "jsx": true
        },
        "ecmaVersion": 12,
        "sourceType": "module"
    },
    "plugins": [
        "react",
        "@typescript-eslint",
        "prettier",
        "react-hooks"
    ],
    "rules": {
        
    }
}

prettier

创建文件 .prettierrc

// .prettierrc
{
  "tabWidth": 2,
  "semi": false,
  "singleQuote": true,
  // 尾后逗号
  "trailingComma": "none",
  // 取消要求箭头函数的参数必须使用括号
  "arrowParens": "avoid"
}
# 对所有文件进行格式化
npx prettier --write .

# prettier配合VS Code插件使用更方便
# VS Code 格式化快捷键 Shift + Alt + F

启动项目

yarn start

# 根据eslint提示进行修改文件
OSZAR »