ERR_REQUIRE_ESM не поддерживает модуль ES, как я могу это исправить? на файловом пакете
У меня есть устаревшее приложение, которое использует несколько очень старых пакетов, которые не поддерживают модуль ES в качестве примера.
file-type
упаковка. Поэтому, если вы настроите HTTP-сервер babel и node с помощью, а затем установите пакет файлового типа, то при запуске сборки и запуска будет выдано сообщение об ошибке, как показано ниже:
Error [ERR_REQUIRE_ESM]: require() of ES Module E:\test\testbabel\node_modules\file-
type\index.js from E:\test\testbabel\dist\index.js not supported.
Instead change the require of E:\test\testbabel\node_modules\file-type\index.js in
E:\test\testbabel\dist\index.js to a dynamic import() which is available in all CommonJS
modules.
at Object.<anonymous> (E:\test\testbabel\dist\index.js:10:17) {
code: 'ERR_REQUIRE_ESM'
}
Я попробовал это в новом проекте, хотя мой старый проект имеет устаревшую конфигурацию или около того, он все еще выдает эту ошибку.
Вот мои
index.js
коды
import http from 'http';
import { fileTypeFromFile } from 'file-type';
const server = http.createServer((req, res) => {
res.end('Hello from the server');
}).listen(4001);
console.log('Server is up and running');
export default server;
файл .
{
"name": "testbabel",
"version": "1.0.0",
"description": "test babel with http or express",
"main": "index.js",
"scripts": {
"build": "babel index.js -d dist",
"start": "npm run build && node dist/index.js"
},
"author": "",
"license": "ISC",
"devDependencies": {
"@babel/cli": "^7.17.10",
"@babel/core": "^7.18.2",
"@babel/plugin-transform-modules-commonjs": "^7.18.2",
"@babel/preset-env": "^7.18.2"
},
"dependencies": {
"file-type": "^17.1.1"
}
}
Я только что попытался импортировать пакет и получил ошибки выше.
пытаться:
Я думал, что конвертер может помочь, поэтому использовал
@babel/plugin-transform-modules-commonjs
но все же не помогло и, похоже, не влияет на включение этого пакета
Я не уверен, но добавил некоторые настройки на
package.json
как
"type": "module"
"type": "commonjs"
вообще не помогло.
какое самое простое решение этой проблемы и как мы это исправим?
Примечание. Я видел, что люди возвращались к поддерживаемому пакету вместо нового, что для меня не имеет смысла в качестве решения.
1 ответ
Вариант 1(babel с мокко): переименуйте «index.js» в «index.mjs» и измените pacakage.json типа файла («index.js» на «index.mjs»), затем оставьте Babel для транспиляции.
// babel-register.js
const babel_register = require("@babel/register").default;
babel_register({
ignore: [
// Only work on Project-wide configuration
// overrides ignore can transpile packages(modules) from node_modules (https://babeljs.io/docs/en/babel-register/#ignores-node_modules-by-default)
],
});
Используйте babel.config вместо .babelrc
//.mocharc.js
require("./babel-register");
module.exports = {
// https://github.com/mochajs/mocha/blob/v8.4.0/example/config/.mocharc.js
ui: "bdd",
timeout: 5000,
recursive: true,
};
Вариант 2 (только для Babel): использование выражения динамического импорта
async function doSomething() {
const {fileTypeFromStream} = await import("file-type");
}
и
["@babel/preset-env", {
exclude: ["proposal-dynamic-import"]
}]
Как избежать выражения динамического импорта Babel tanspile