ERR_REQUIRE_ESM要求的ES模块不支持我怎么能解决这个问题?关于文件类型的包



我有一个过时的应用程序,它使用非常旧的几个不支持ES模块的包作为示例file-type包。所以,如果你安装babel和节点HTTP服务器,然后安装文件类型的包,然后开始构建和运行将抛出如下错误信息:

Error [ERR_REQUIRE_ESM]: require() of ES Module E:testtestbabelnode_modulesfile- 
typeindex.js from E:testtestbabeldistindex.js not supported.
Instead change the require of E:testtestbabelnode_modulesfile-typeindex.js in 
E:testtestbabeldistindex.js to a dynamic import() which is available in all CommonJS 
modules.
at Object.<anonymous> (E:testtestbabeldistindex.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;

filepackage.json.

{
"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",根本没有帮助。

这个问题最简单的解决方案是什么?我们如何修复它?

注意:我看到人们回到支持的包,而不是新的,这对我来说是没有意义的解决方案。

Option1(babel with mocha): Rename "index.js";index.mjs"并修改文件类型的包。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)
],
});

使用巴别塔。配置代替.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,
};

Option2(仅限babel):使用动态导入表达式

async function doSomething() {
const {fileTypeFromStream} = await import("file-type");
}

["@babel/preset-env", {
exclude: ["proposal-dynamic-import"]
}]

避免巴别塔文件动态导入表达式

相关内容

  • 没有找到相关文章

最新更新