首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不支持ES模块的ERR_REQUIRE_ESM要求如何解决这个问题?在文件类型包上

不支持ES模块的ERR_REQUIRE_ESM要求如何解决这个问题?在文件类型包上
EN

Stack Overflow用户
提问于 2022-05-30 02:39:59
回答 1查看 1.1K关注 0票数 1

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

代码语言:javascript
复制
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代码

代码语言:javascript
复制
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;

文件package.json

代码语言:javascript
复制
{
  "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",一点帮助都没有。

解决这个问题最简单的方法是什么,我们如何解决?

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-07-13 23:59:51

Option1(带mocha的Babel ):将"index.js“重命名为"index.mjs”,并修改文件类型的pacakage.json ("index.js“改为"index.mjs"),然后让Babel为您转到transpile。

代码语言:javascript
复制
// 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

代码语言:javascript
复制
//.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):使用动态导入表达式

代码语言:javascript
复制
async function doSomething() {
    const {fileTypeFromStream} = await import("file-type");
}

代码语言:javascript
复制
["@babel/preset-env", {
    exclude: ["proposal-dynamic-import"]
}]

避免Babel tanspile动态导入表达式

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72428643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档