"type": "module" in package.json throw new ERR_REQUIRE_ESM(filename, parentPath, packageJsonPath)

Naf*_*Joy 6 import node.js package.json

我想在我的 nodejs 项目中使用 import 而不是使用 require。所以,我补充说,

"type": "module"
Run Code Online (Sandbox Code Playgroud)

在我的package.json 中

import index from './index.js';
Run Code Online (Sandbox Code Playgroud)

server.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: ....
Run Code Online (Sandbox Code Playgroud)

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
};
Run Code Online (Sandbox Code Playgroud)

cod*_*ker 12

对于我的情况,我降级:\nnode-fetch ^3.0.0 \xe2\x86\x92 ^2.6.1

\n

问题解决了。

\n


Evi*_*ong 4

根据编辑之前的堆栈跟踪(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'
}
Run Code Online (Sandbox Code Playgroud)

我试图找到抛出此错误的 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);
    }
  }
  // ...
};
Run Code Online (Sandbox Code Playgroud)

注释Function require shouldn't be used in ES modules告诉我们要加载的js文件是一个ES模块,但是调用者试图使用require()函数来加载它。

此外,仔细检查 Node src https://github.com/nodejs/node/blob/6cc94b2d7f69f1f541f7c5de3cb86e569fbd4aa3/lib/internal/errors.js#L1319证明这H:\WORKSPACE\CMDs\node-basic\server.conf.js是要加载的 ES 模块。

所以我试图猜测谁正在尝试加载server.conf.js您的应用程序,但没有运气。require('./server.conf.js')很可能在您index.js或其他地方有一个。如果你发现它,只需将其更改为import修复即可。