【问题标题】:NodeJS (Server): ReferenceError: require is not defined when type: moduleNodeJS(服务器):ReferenceError:当类型:模块时未定义要求
【发布时间】: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 库中?这是一个同时使用前端和后端的库,因此使用导入/导出很重要。

谢谢

【问题讨论】:

    标签: node.js server node-modules


    【解决方案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】:

        几点:

        1. 使用.mjs 而不是.js
        2. 切勿使用require
        3. 可以选择使用“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"
        

        【讨论】:

          猜你喜欢
          • 2020-12-26
          • 1970-01-01
          • 1970-01-01
          • 2020-12-07
          • 2019-06-09
          • 1970-01-01
          • 1970-01-01
          • 2017-06-20
          • 1970-01-01
          相关资源
          最近更新 更多