[英]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.