簡體   English   中英

NodeJS(服務器):ReferenceError:類型時未定義要求:模塊

[英]NodeJS (Server): ReferenceError: require is not defined when type: module

在節點 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 庫中? 這是一個同時使用前端和后端的庫,因此使用導入/導出很重要。

謝謝

正如文檔所說:

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 來轉換您的代碼。

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

但是,如果你想添加它,你必須在你的文件的頂部添加它:一切都應該工作正常。

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

幾點:

  1. 使用.mjs而不是.js
  2. 永遠不要使用require
  3. 使用“type”:“module”是可選的。

如果您使用 {"type":"module"},您將無法在您的項目中使用require function。 因此,如果您想同時使用requireimport ,則需要在package.json中添加以下屬性。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM