У меня есть приложение, созданное с использованием 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 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
.