create react app 项目引入 src 外部的组件,提示以下错误,
Module parse failed: Unexpected token (7:4)File was processed with these loaders: * ../../node_modules/.pnpm/@pmmmwh+react-refresh-webpack-plugin@0.5.11_react-refresh@0.11.0_webpack-dev-server@4.15.2_webpack@5.91.0/node_modules/@pmmmwh/react-refresh-webpack-plugin/loader/index.js * ../../node_modules/.pnpm/source-map-loader@3.0.2_webpack@5.91.0/node_modules/source-map-loader/dist/cjs.jsYou may need an additional loader to handle the result of these loaders.
这是由于 cra 的默认配置只编译 src 下的文件,对于 src 外部的文件没有配置相应的 loader 来处理,需要修改 webpack 的配置。可以通过 react-app-rewired 和 customize-cra 来解决这个问题。
安装 react-app-rewired 和 customize-cra
pnpm add react-app-rewired customize-cra -D
在根目录下新建 config-overrides.js
文件,新增以下内容
const path = require('path');const { override, babelInclude } = require('customize-cra');module.exports = function (config, env) { return Object.assign( config, override( babelInclude([ path.resolve('src'), path.resolve('../shared'), // 新增需要编译的文件目录 ]) )(config, env) );};
配置完成后,还需要修改启动和构建命令,修改 package.json 文件的 script 命令如下
"scripts": {- "start": "react-scripts start",+ "start": "react-app-rewired start",- "build": "react-scripts build",+ "build": "react-app-rewired build",- "test": "react-scripts test",+ "test": "react-app-rewired test", "eject": "react-scripts eject"}
这样就可以正常编译了。