簡體   English   中英

要求沒有定義? Node.js

[英]require is not defined? Node.js

剛開始使用 Node.js。 在我的app/js文件中,我正在做這樣的事情:

應用程序.js

var http = require('http');

http.createServer(function (request, response) {
  response.writeHead(200, {'Content-Type': 'text/plain'});
  response.end('Am I really running a server?!');
}).listen(8080, '127.0.0.1');

console.log('running server!');

當我在終端中運行node app.js時,控制台會吐出'running server!' ,但在我的瀏覽器中,我得到了Uncaught ReferenceError: require is not defined

有人可以向我解釋為什么在終端中它可以正常工作,但在瀏覽器中卻不能嗎?

我正在使用節點的http-server來服務我的頁面。

從版本 14 開始,這現在也可以在 Node.js 中發生。

當您在package.json中將包類型聲明為模塊時會發生這種情況。 如果您這樣做, 則不能使用某些 CommonJS 變量,包括require

要解決此問題,請從package.json刪除"type": "module"並確保您沒有任何以.mjs結尾的文件。

在終端中,您正在運行節點應用程序並且它正在運行您的腳本。 這是一個與在瀏覽器中直接運行腳本截然不同的執行環境。 雖然 Javascript 語言大致相同(如果您運行的是 Chrome 瀏覽器,則兩者都是 V8),但其余的執行環境(例如可用的庫)並不相同。

node.js 是一個服務器端 Javascript 執行環境,它結合了 V8 Javascript 引擎和一堆服務器端庫。 require()是 node.js 添加到環境中的一項功能。 因此,當您在終端中運行 node 時,您正在運行一個包含require()的環境。

require()不是瀏覽器內置的功能。 這是 node.js 的一個特定特性,而不是瀏覽器的特性。 因此,當您嘗試讓瀏覽器運行您的腳本時,它沒有require()

有多種方法可以在瀏覽器中運行某些形式的 node.js 代碼(但不是全部)。 例如,您可以獲得類似(盡管不完全相同)的require()瀏覽器替代品。

但是,您不會在瀏覽器中運行 Web 服務器,因為瀏覽器無法做到這一點。


您可能對browserify感興趣,它允許您使用require()語句在瀏覽器中使用節點樣式模塊。

Node.JS 是一種服務器端技術,而不是瀏覽器技術。 因此,特定於節點的調用,如require() ,在瀏覽器中不起作用。

browserify的WebPack如果你想從節點服務的瀏覽器專用模塊。

正如 Abel 所說, Node >= 14 中的ES 模塊默認不再require

如果要添加它,請將此代碼放在文件的頂部:

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

來源: https : //nodejs.org/api/modules.html#modules_module_createrequire_filename

只需從 package.json 中刪除 "type":"module"。 我希望這會幫助你😊。

我的錯誤:我在我的項目中安裝了 ESLint,並且在填寫問卷時出錯並選擇了錯誤的模塊類型)也許它會對某人有所幫助))

您的項目使用什么類型的模塊? · * commonjs

Point 1:僅在app.js文件或main.js文件中Add require()函數調用代碼行。

第 2 點:通過檢查pacakage.json文件確保安裝了所需的包。 如果未更新,請運行“npm i”。

我通過執行以下步驟解決了這個問題:-

第 1 步:在項目根目錄創建addRequire.js文件。

第 2 步:在addRequire.js添加這行代碼

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

global.require = require; //this will make require at the global scobe and treat it like the original require

第 3 步:我在app.js文件頭導入了文件

import "./start/addRequire.js";

現在你在 import 旁邊有 require 並且你可以同時使用它。

我通過從 package.json 文件中刪除以下行來解決它

 "type": "module"

希望它能解決問題。

為了補充上面其他人所說的內容,當您的 HTML 文件中有一個路徑時,您的 js 文件就會在客戶端被讀取。 至少這對我來說是個問題。 我在 index.html 的標簽中將其作為腳本希望這會有所幫助!

暫無
暫無

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

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