W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Node.js require函數(shù)是將模塊導(dǎo)入到當(dāng)前文件的主要方式。在Node.js中有三種的模塊:核心模塊,文件模塊和外部node_modules。
當(dāng)我們使用相對路徑(例如,require('./filename')或require('../foldername / filename'))調(diào)用require時(shí),Node.js在新作用域中運(yùn)行目標(biāo)JavaScript文件,并返回分配給該文件中module.exports的最終值。
使用 require
函數(shù)只給你module.exports變量,你需要將結(jié)果分配給本地的變量,以便在作用域內(nèi)使用它。
var yourChoiceOfLocalName = require("./myFile");
require的行為與JavaScript中的任何其他函數(shù)相似。我們可以基于一些條件調(diào)用require(),并且只有在需要時(shí)加載模塊。
if(iReallyNeedThisModule){
var myData = require("./myData");
}
require函數(shù)阻止進(jìn)一步的代碼執(zhí)行,直到模塊被加載。
require()調(diào)用之后的代碼不會被執(zhí)行,直到模塊被加載和執(zhí)行。
// Blocks execution till module is loaded
var myData = require("./myData");
// Continue execution after it is loaded
console.log("loaded myData");
myData();
第一次對特定文件進(jìn)行require調(diào)用后,將緩存module.exports。
var t1 = new Date().getTime();
var myData1 = require("./myData");
console.log(new Date().getTime() - t1); // longer
var t2 = new Date().getTime();
var myData2 = require("./myData");
console.log(new Date().getTime() - t2); // shorter
模塊之間的共享狀態(tài)在各種上下文中是有用的。
This allows you to share in-memory objects between modules.
在c:/intro/shared/myData.js中我們有
module.exports = {
something: 123
};
在c:/intro/shared/app.js我們有
var myData = require("./myData");
console.log("initial something:", myData.something); // 123
// Now modify something:
myData.something = 456;
// Now load myValue:
var bas = require("./myValue");
在c:/intro/shared/myAnother.js我們有
var myData = require("./myData");
console.log("in another module:", myData.something); // 456
每次require調(diào)用在Node.js進(jìn)程中解析到同一個(gè)文件時(shí),都會返回相同的對象。要為每個(gè)require函數(shù)調(diào)用創(chuàng)建新對象,請從返回新對象的源模塊中導(dǎo)出函數(shù)。然后在你的目的地需要模塊,并調(diào)用這個(gè)導(dǎo)入的函數(shù)來創(chuàng)建一個(gè)新的對象。
在c:/intro/factory/myData.js文件
module.exports = function () {
return {
something: 123
};
};
在c:/intro/factory/app.js我們有
var myData = require("./myData");
// create a new object
var obj = myData();
// use it
console.log(obj.something); // 123
我們甚至可以一步到位
require("./myData")();
核心模塊是編譯成Node二進(jìn)制的模塊。核心模塊在 require()
中具有最高優(yōu)先級。在模塊命名沖突的情況下,加載核心模塊。
例如,Node包含一個(gè)名為 http
的核心模塊。調(diào)用 require(“http")
將始終加載核心http模塊。核心模塊位于Node源代碼的lib目錄中。
要找出程序包所在的位置,請使用 require.resolve()
函數(shù)。它返回模塊的路徑。如果傳遞給resolve()的模塊名稱是核心模塊,則返回模塊的名稱。如果模塊是文件模塊,resolve()返回模塊的文件名。如果Node找不到指定的模塊,則拋出一個(gè)錯(cuò)誤。
以下示例顯示了REPL環(huán)境中resolve()的用法。
require.resolve("http");
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: