在Node v13中使用@ babel / register用于React应用程序

问题描述 投票:1回答:1

我有一个使用create-react-app构建的应用,并且它的入口点使用的是这样的东西-

require('babel-register')({
  ignore: [/(node_modules)/],
  presets: ['es2015', 'react-app'],
  plugins: [
    'syntax-dynamic-import',
    'dynamic-import-node',
    'react-loadable/babel'
  ]
});
require('./index');

我正在升级Node(从v8到v13.5),并决定也升级Babel。使用Babel 7,以上代码被重写为—

require('@babel/register')({
  ignore: [/(node_modules)/],
  presets: ['@babel/preset-env', 'react-app'],
  plugins: [
    '@babel/plugin-syntax-dynamic-import',
    'dynamic-import-node',
    'react-loadable/babel'
  ],
});
require('./index');

现在运行此命令时,出现错误—

internal/modules/cjs/loader.js:1160
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: /my-app/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js
require() of ES modules is not supported.
require() of /my-app/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js from /my-app/server/controllers/index.js is an ES module file as it is a .js file whose nearest parent package.json contains "type": "module" which defines all .js files in that package scope as ES modules.
Instead rename asyncToGenerator.js to end in .cjs, change the requiring code to use import(), or remove "type": "module" from /my-app/node_modules/babel-preset-react-app/node_modules/@babel/runtime/helpers/esm/package.json.

我猜这是因为preset-env正在使用模块支持,因为它在我的Node版本(v13.6.0)中正在检测到它。如果这样可以解决此问题,如何强制它使用es2015预设?人们早已不赞成使用preset-env

node.js reactjs babel create-react-app
1个回答
0
投票

有运气找到答案吗?看来我遇到了同样的问题。

© www.soinside.com 2019 - 2024. All rights reserved.