Module not found: Error: You attempted to import babel-preset which falls outside of the project src/ directory

Module not found: Error: You attempted to import babel-preset which falls outside of the project src/ directory

我正在开发一个使用 create-react-app 创建的应用程序

但后来我需要使用 mediainfojs 库,这个库需要 wasm 文件,根据我的理解,我不能使用 create-react-app 添加它,我不得不弹出它。

弹出后,我去了how to add the wasm on the webpack

上的mediainfo信息

他们使用 CopyPlugin,但是当我尝试这样做时,它抱怨我的 webpack (4) 和 CopyPlugin 的版本....所以,我决定迁移到 webpack 5

那是痛苦开始的时候......在按照他们的 migration tutorial 对我的 webpack.config 做了一堆修改后,我在运行 yarn build 时遇到了以下错误:

Module not found: Error: You attempted to import /MyWorkspace/project/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator which falls outside of the project src/ directory. Relative imports outside of src/ are not supported.

唯一调用此 babel-preset-react-app 的地方在配置中

这里:

                {
                    test: /\.(js|mjs|jsx|ts|tsx)$/,
                    include: paths.appSrc,
                    loader: require.resolve("babel-loader"),
                    options: {
                        customize: require.resolve(
                            "babel-preset-react-app/webpack-overrides"
                        ),

这里:

                {
                    test: /\.(js|mjs)$/,
                    exclude: /@babel(?:\/|\{1,2})runtime/,
                    loader: require.resolve("babel-loader"),
                    options: {
                        babelrc: false,
                        configFile: false,
                        compact: false,
                        presets: [
                            [
                                require.resolve("babel-preset-react-app/dependencies"),
                                { helpers: true },
                            ],
                        ],
                        cacheDirectory: true,
                        cacheCompression: isEnvProduction,

                        // If an error happens in a package, it's possible to be
                        // because it was compiled. Thus, we don't want the browser
                        // debugger to show the original code. Instead, the code
                        // being evaluated would be much more helpful.
                        sourceMaps: false,
                    },
                },

我调查了此处报告的类似问题,但其中大部分似乎与动态导入的静态文件或在项目目录后引用“..”目录的导入有关

完整的 webpack 配置文件是 here

我可能遗漏了一些非常愚蠢的东西,如果有人能指出,我会很高兴。

我也在尝试将一个弹出的 CRA 项目升级到 Webpack 5。我能够使用 babel-preset-react-app-webpack-5 继续前进,但遇到了下一个与 CRA 相关的问题。

请务必将 require.resolve("babel-preset-react-app/dependencies") 之类的调用替换为 require.resolve("babel-preset-react-app-webpack-5/dependencies")

此外,请注意该软件包似乎尚未准备好投入生产,但我自己的项目仍处于早期开发阶段。

我遇到了类似的挑战,我能够通过在 webpack.config 文件的顶部添加这些定义来解决这个问题

const babelRuntimeEntry = require.resolve('babel-preset-react-app');
const babelRuntimeEntryHelpers = require.resolve(
 '@babel/runtime/helpers/esm/assertThisInitialized',
  { paths: [babelRuntimeEntry] }
);
const babelRuntimeRegenerator = require.resolve('@babel/runtime/regenerator', {
  paths: [babelRuntimeEntry]
});

然后 resolve.plugins 中的 ModuleScopePlugin 更新为

new ModuleScopePlugin(paths.appSrc, [
      paths.appPackageJson,
      babelRuntimeEntry,
      babelRuntimeEntryHelpers,
      babelRuntimeRegenerator])