Skip to content

鼓励作者:欢迎 star 或打赏犒劳

修改 CRA 的默认配置

使用 create-react-app 初始化项目

sh
# JavaScript 模板
yarn create react-app my-app
# OR
npx create-react-app my-app

# TypeScript 模板
yarn create react-app my-app --template typescript
# OR
npx create-react-app my-app --template typescript

使用 react-app-rewiredcustomize-cra 方案

使用

安装依赖
sh
yarn add -D react-app-rewired customize-cra
# OR
npm install -D react-app-rewired customize-cra
修改 package.json 文件
diff
"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test",
+   "start": "react-app-rewired start",
+   "build": "react-app-rewired build",
+   "test": "react-app-rewired test",
}
项目根目录创建 config-overrides.js
js
const { override, addWebpackAlias } = require('customize-cra')
const path = require('path')

module.exports = override(
  // 配置别名
  addWebpackAlias({
    '@': path.resolve(__dirname, 'src')
  })
)

相关资料

使用 craco 方案

使用

安装依赖
sh
yarn add -D @craco/craco
# OR
npm install -D @craco/craco
修改 package.json 文件
diff
"scripts": {
-   "start": "react-scripts start",
-   "build": "react-scripts build",
-   "test": "react-scripts test",
+   "start": "craco start",
+   "build": "craco build",
+   "test": "craco test",
}
项目根目录创建 craco.config.js
js
const path = require('path')

module.exports = {
  webpack: {
    // 配置别名
    alias: {
      '@': path.resolve(__dirname, 'src')
    }
  }
}

相关资料

TypeScript 模板踩坑点

CRA 创建的 TypeScript 模板中,配置别名 alias 时有坑

tsconfig.json 配置的 paths 字段,会在运行 start / build 命令后被 CRA 给删除,同时控制台会有如下提示和报错

sh
The following changes are being made to your tsconfig.json file:
  - compilerOptions.paths must not be set (aliased imports are not supported)

Cannot find module '@/xxx'. TS2307

解决方案

新建 paths.json 文件,并将 paths 的配置写入进去, paths 的配置项要与 webpack alias 配置项一致

json
{
  "compilerOptions": {
    "baseUrl": ".",
    "paths": {
      "@/*": ["src/*"]
    }
  }
}

再去 tsconfig.json 中使用 extends 配置引入

json
{
  "extends": "./paths.json"
}

相关 issues

fb 真霸道,自己不用 alias,也不让用户搞

如有转载或 CV 的请标注本站原文地址