使用react-app-rewired共享React组件遇JSX语法支持错误求助
问题解答
一、是否遗漏操作步骤?
是的,你遗漏了两个关键步骤:
给
shared项目添加Babel配置
直接导入未编译的shared/src/Test.js时,Babel无法识别JSX语法,需要在shared根目录创建.babelrc文件,添加React转译预设:{ "presets": ["@babel/preset-react", "@babel/preset-env"] }同时安装对应的开发依赖:
cd shared && npm install --save-dev @babel/preset-react @babel/preset-env修正
config-overrides.js中的路径配置
原配置中fs.realpathSync("node_modules/shared/src")的路径写法存在潜在问题,建议改为动态路径,同时简化冗余代码:var path = require('path'); const { override, addDecoratorsLegacy, babelInclude, disableEsLint } = require("customize-cra"); module.exports = override( disableEsLint(), addDecoratorsLegacy(), babelInclude([ path.resolve('src'), path.resolve(__dirname, 'node_modules/shared/src') ]) )
二、更简便的共享库搭建方式
推荐以下几种无需react-app-rewired的方案:
1. npm 本地链接方案
- 在
shared根目录执行:npm link,将本地包注册到全局 - 在
my-app根目录执行:npm link shared,直接关联本地shared包 - 给
shared的package.json添加编译脚本和入口配置:
修改{ "main": "dist/index.js", "scripts": { "build": "babel src --out-dir dist" } }shared代码后执行npm run build,my-app即可同步使用最新组件。
2. Monorepo 工作区方案(pnpm/Yarn)
- 在仓库根目录创建
package.json,配置工作区:{ "private": true, "workspaces": ["shared", "my-app"] } - 在
shared的package.json中设置包名(如"name": "@my/shared") - 在
my-app中直接安装依赖:pnpm add @my/shared(或yarn add @my/shared) - 配合
babel或tsdx自动编译shared,无需手动处理链接。
3. 组件库脚手架(tsdx)
直接用tsdx快速初始化共享组件库,它会自动处理编译、打包、语法转译:
npx tsdx create shared
初始化完成后,在my-app中直接导入shared即可,修改代码后会自动热更新编译结果。
内容的提问来源于stack exchange,提问作者RobKohr
相关产品推荐
相关产品推荐

