NodeJS(服务器):ReferenceError:当类型:模块时未定义要求
Posted
技术标签:
【中文标题】NodeJS(服务器):ReferenceError:当类型:模块时未定义要求【英文标题】:NodeJS (Server): ReferenceError: require is not defined when type: module 【发布时间】:2020-06-08 03:41:34 【问题描述】:在节点 13.8 上,我正在尝试使用导入/导出。
例如:
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
有没有办法使用 import / export AND require?
最初的错误,这是否意味着我必须将我的库包装在 NPM 库中?这是一个同时使用前端和后端的库,因此使用导入/导出很重要。
谢谢
【问题讨论】:
【参考方案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 转译您的代码。
【讨论】:
【参考方案2】:Node >= 14 中的 ES 模块不支持 require。
但是,如果您想添加它,您必须在文件顶部添加它: 一切都应该正常。
import createRequire from 'module';
const require = createRequire(import.meta.url);
【讨论】:
【参考方案3】:几点:
-
使用
.mjs
而不是.js
。
切勿使用require
。
可以选择使用“type”:“module”。
【讨论】:
__dirname 未定义怎么办 找到这个import fileURLToPath from 'url'; import dirname from 'path'; const __filename = fileURLToPath(import.meta.url); const __dirname = dirname(__filename);
nodejs.org/api/…【参考方案4】:
如果您使用 "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"
【讨论】:
以上是关于NodeJS(服务器):ReferenceError:当类型:模块时未定义要求的主要内容,如果未能解决你的问题,请参考以下文章