NodeJS “type”:package.json中的“module”抛出新的ERR_REQUIRE_ESM(文件名,父路径,packageJsonPath)

c6ubokkw  于 2022-12-03  发布在  Node.js
关注(0)|答案(9)|浏览(767)

我想在我的nodejs项目中使用import而不是require。所以,我添加了,

"type": "module"

在我package.json中。

import index from './index.js';

服务器.js
当我跑步时

  • 节点服务器.js*

错误提示:

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

      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: ....

server.conf.js已粘贴到下面。

import express from 'express';

import http from 'http';
let app = express();
let server = http.createServer(app);

import morgan from 'morgan';
import methodOverride from 'method-override';;
import path from 'path';

let port = process.env.PORT || 4000;
app.use(morgan('dev'));
app.use(methodOverride('X-HTTP-Method-Override'));
let router = express.Router();
import routes from '../app/routes';
routes(app, router, client);
server.listen(port);
console.log(`Wizardry is afoot on port ${port}`);
export {
    app,
    client
};
g52tjvyc

g52tjvyc1#

对于我的情况,我降级:节点提取^3.0.0 → ^2.6.1
问题解决了。

h43kikqp

h43kikqp2#

根据编辑前的stack-trace(https://stackoverflow.com/revisions/61558835/1):

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

      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
      ^

Error [ERR_REQUIRE_ESM]: Must use import to load ES Module: H:\WORKSPACE\CMDs\node-basic\server.conf.js
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:1174:13)
    at Module.load (internal/modules/cjs/loader.js:1002:32)
    at Function.Module._load (internal/modules/cjs/loader.js:901:14)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:74:12)
    at internal/main/run_main_module.js:18:47 {
  code: 'ERR_REQUIRE_ESM'
}

我试图找到抛出此错误的Node src:
https://github.com/nodejs/node/blob/c24b74a7abec0848484671771d250cfd961f128e/lib/internal/modules/cjs/loader.js#L1234

// Native extension for .js
Module._extensions['.js'] = function(module, filename) {
  if (filename.endsWith('.js')) {
    const pkg = readPackageScope(filename);
    // Function require shouldn't be used in ES modules.
    if (pkg && pkg.data && pkg.data.type === 'module') {
      // ...
      throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath);
    }
  }
  // ...
};

注解Function require shouldn't be used in ES modules告诉要加载的js文件是ES模块,但调用者试图使用require()函数加载它。
此外,对Node src www.example.com的双重检查https://github.com/nodejs/node/blob/6cc94b2d7f69f1f541f7c5de3cb86e569fbd4aa3/lib/internal/errors.js#L1319证明H:\WORKSPACE\CMDs\node-basic\server.conf.js是要加载的ES模块。
所以我试着猜测是谁试图在你的应用程序中加载server.conf.js,但没有成功。很可能是在你的index.js或其他地方有一个require('./server.conf.js')。如果你发现了它,就把它改成import来修复。

blpfk2vs

blpfk2vs3#

有同样的问题。我安装了最新的节点版本,然后它工作了。尝试同样的。此外,如果你使用的是windows,请确保它是正确的版本,iidee 64位,32位。

doinxwow

doinxwow4#

在我的例子中,我有一个数据文件(data.js),其中的产品被列为数组中的对象。看起来像这样:

const data={
  products:[
    {
      brand:'nike',
      price:1200
    },
    {
      brand:'adidas',
      price:1400
    }
  ]
}

export default data

错误是因为我愚蠢地导出它,就像它是一个函数或类,并写道:

export default data={
etc...
}

我怀疑这是你的错误的情况下,但它仍然显示了如何繁琐,经常这个错误可以显示出来。如果它的任何清晰度什么我想说的我基本上是说,这通常会显示由于文件本身是不可读的导入。如果你把“类型”:“module”,则它是定义了节点的版本,或者是您试图导入的某个基本级别的问题。尝试一开始就逐个删除每个导入,以查看哪个可能是原因。然后从那里开始工作

mjqavswn

mjqavswn5#

不需要什么花哨的东西。只需更新Node.js版本。

csbfibhn

csbfibhn6#

检查您的NodeJS版本是否与模块兼容(“type”:“module”),某些版本存在已知问题。
很可能在index.js/server.js或您要导入的依赖包中或其他地方存在require('./server.conf.js')。如果您发现它,只需将其更改为import即可修复。
1-检查您是否都需要语句
2-分析代码中require语句相关包

  • 尝试生成...
  • 尝试部署到GC、DO、AWS或HKU上的NodeJS容器
qxsslcnc

qxsslcnc7#

我也面临着类似的问题。所以我降级粉笔模块版本从5.0.1到4.1.0。它为我工作。

x0fgdtte

x0fgdtte8#

在我的例子中,我运行的是Angular 13.X和Nx 14.X,但我的节点版本仍然是12.X,所以将节点版本升级到^14可以解决这个问题。

xu3bshqb

xu3bshqb9#

我更新了终端节点版本为16,删除了node_modules并重新安装。

相关问题