类型:模块时未定义NodeJS(服务器):ReferenceError:require

时间:2020-02-24 13:36:45

标签: node.js server node-modules

在节点13.8上,我正在尝试使用导入/导出。

EG: import {ChatClient, Message, MessageParser} from './chat-client/module.js';

但是当我这样做时,我会得到

SyntaxError: Cannot use import statement outside a module

因此,在我的package.json中,我设置了"type" : "module",但是现在当我尝试使用const io = require('socket.io-client');

我得到ReferenceError: require is not defined

有没有一种方法可以使用导入/导出并需要?

原始错误,是否仅意味着我必须将我的库包装在NPM库中?该库同时使用了前端和后端,因此使用导入/导出很重要。

谢谢

4 个答案:

答案 0 :(得分:1)

如文档所述:

No require, exports, module.exports, __filename, __dirname
These CommonJS variables are not available in ES modules.

https://nodejs.org/api/esm.html#esm_no_require_exports_module_exports_filename_dirname

您不能同时使用两者。如果要这样做,请使用Babel来翻译您的代码。

答案 1 :(得分:1)

几点:

  1. 使用.mjs代替.js
  2. 请勿使用require
  3. 使用“类型”:“模块”是可选的。

答案 2 :(得分:1)

如果您使用 {"type":"module"},您将无法在您的项目中使用 require 函数。因此,如果您想使用 require 以及 import,您需要在 package.json 中添加以下属性。

  "babel": {
    "presets": [
      "stage-3",
      "latest"
    ]
  }

"babel-preset-latest": "^6.16.0"
"babel-preset-stage-3": "^6.5.0"

答案 3 :(得分:0)

Node >= 14 中的 ES 模块不支持 require。

但是如果你想添加它,你必须在文件的顶部添加: 一切正常。

import { createRequire } from 'module';
const require = createRequire(import.meta.url);