Node.js模塊以及模塊加載機制

2019獨角獸企業重金招聘Python工程師標準>>> hot3.png

Node.js中的模塊

????在Node.js中,以模塊為單位劃分功能,通過一個完整的模塊加載機制使得開發人員可以將應用程序劃分為多個不同的部分。模塊的使用可以提高代碼重用率,提高應用程序的開發效率,而且開發人員可以根據具體的需求引入第三方模塊或者自定義模塊到應用程序中。 ????在Node.js中一個Node.js文件就是一個模塊,這樣的文件可以是JavaScript代碼腳本,可以是JSON,也可以是編譯過的C/C++擴展。

Node.js的核心模塊與文件模塊

????在開發中可以使用require()方法加載模塊,如果是加載Node.js的核心模塊,只需要將被加載的模塊的名稱作為參數傳給require()即可,程序示例:

var http = require('http');	//加載Node.js的核心模塊http模塊
var fs = require('fs');	//加載Node.js的核心模塊fs模塊var server = http.createServer();	//使用http模塊創建服務
server.on('connection', function(request, response){	//通過on()方法監聽connection事件fs.readFile('./text.txt', function(err, data){	//使用fs模塊的readFile()方法讀取text.txt文件內容if(err){console.log('文件讀取時出現錯誤:' + err);}else{console.log(data.toString());}});
});server.listen(8000, '127.0.0.1');

程序運行截圖:

圖片1.png

????在使用require()方法加載模塊的時候,如果寫錯了模塊的名稱就會引起程序報錯,require()函數將會拋出異常,程序示例:

var http = require('aaaa');	//故意寫錯模塊名稱var server = http.createServer();
server.on('connection', function(request, response){console.log(request.url);
});server.listen(8000, '127.0.0.1');

程序運行截圖:

圖片2.png 以下的幾種文件可以作為Node.js的模塊文件:

  • 后綴名為.js的JavaScript腳本文件。
  • 后綴名為.json的JSON文本文件。
  • 后綴名為.node的經過編譯的二進制模塊文件。 ????在Node.js中加載模塊時需要指定模塊文件的完整路徑以及文件名稱。可以是相對路徑也可以是絕對路徑,程序示例:
  • (1)創建myModule.js:
var myFunction = function(){console.log('自定義模塊中的方法執行了。');
}exports.myFunction = myFunction;
  • (2)創建module.js:
var myModule = require('./myModule.js');	//使用require()方法引入自定義模塊myModule.myFunction();	//執行自定義模塊中的方法

????程序運行截圖:

圖片3.png

以類的方式定義模塊

????在定義模塊時可以將“exports”對象寫為“module.exports”,但是在以類的方式定義模塊的時候只能寫做“module.exports”。程序示例:

  • (1)創建student.js模塊文件:
var _Name,_Age;
var Name = '', Age = 0;//模塊對象的構造方法
var student = function(name, age){_Name = name;_Age = age;
}//獲取私有變量_Name的值
student.prototype.GetName = function(){return _Name;
}//設置私有變量_Name的值
student.prototype.SetName = function(name){_Name = name;
}//獲取私有變量_Age的值
student.prototype.GetAge = function(){return _Age;
}//設置私有變量_Age的值
student.prototype.SetAge = function(age){_Age = age;
}student.prototype.Name = Name;
student.prototype.Age = Age;module.exports = student;
  • (2)創建app.js文件:
var student = require('./student.js');var s1 = new student('Tom', 12);
/*
*獲取模塊中的私有變量
*/
console.log('模塊中的私有變量:');
console.log('姓名:' + s1.GetName());
console.log('年齡:' + s1.GetAge());//設置模塊中中公有變量的值
student.Name = 'Danny';
student.Age = 14;/*
*獲取模塊中公有變量值
*/
console.log('模塊中的公有變量的值:');
console.log('姓名:' + student.Name);
console.log('年齡:' + student.Age);

程序運行截圖:

圖片4.png

加載node_modules目錄中的模塊

????在Node.js中使用require()方法加載模塊時只傳入了文件名稱作為require()方法的參數,而沒有指明文件的路徑,

require(‘module.js’);	//只指定了文件的名稱,沒有指定文件的路徑

????則程序在運行的時候Node.js會將該文件視為node_modules目錄下的文件。

通過目錄加載模塊

????在Node.js中,把目錄名稱指定為模塊名,就可以通過目錄對模塊進行管理。可以直接require一個目錄,假設有一個目錄名為folder,如:

var myMod = require('./folder');

????程序在運行的時候,Node將搜索整個folder目錄,Node會假設folder為一個包并試圖找到包定義文件package.json。如果folder 目錄里沒有包含package.json文件,Node會假設默認主文件為index.js,即會加載index.js。如果index.js也不存在, 那么加載將失敗。

從全局目錄中加載模塊

????如果在操作系統的環境變量中設置NODE_PATH變量,并且已經將變量值設置為一個有效的磁盤目錄,在使用require()方法加載模塊時只指定了模塊的名稱而沒有指定模塊的路徑,而且Node.js從其他路徑中找不到需要被加載的模塊文件時,Node.js將會從NODE_PATH變量值所指向的磁盤目錄中尋找并加載模塊文件。如果最終都沒有找到,require()方法就會拋出異常。

require()方法對模塊的查找策略

????Node.js的require()方法加載模塊時,對模塊文件的查找策略如下圖:

圖片5.png

轉載于:https://my.oschina.net/u/3346420/blog/1924883

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538063.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538063.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538063.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

wordpress支持MySQL5.5_wordpress數據庫版本為5.5以上導出不能在5.5以下的版本導入的問題解決...

自從wordpress4.2版本出現以后,已經可以支持utf8mb4數據編碼,那么如果您的php空間的數據庫版本是mysql5.1的,那么很多站長朋友從mysql5.5導出來再導入到5.1的數據中的時候,那么問題來了,就會報錯Unknown collation ‘u…

i++與++i的區別

代碼: int i1; int ai;//先賦值,然后再自增,它等價于 a i ; i i 1System.out.println("a"a);System.out.println("i"i);System.out.println("---------------");int j1; int bj;//先自增,后賦值…

獲取數據庫名稱dbName

2019獨角獸企業重金招聘Python工程師標準>>> Autowired DataSource ds; connection ds.getConnection(); tring dbName connection.getCatalog(); connection.close(); 轉載于:https://my.oschina.net/u/2351011/blog/1925838

mysql 5.7 密碼過期_mysql5.7 密碼過期了怎么辦

mysql5.7 密碼過期了怎么辦發布時間:2020-05-08 14:11:09來源:億速云閱讀:148作者:三月下文主要給大家帶來mysql5.7 密碼過期了怎么辦,希望這些文字能夠帶給大家實際用處,這也是我編輯mysql5.7 密碼過期了怎…

我的開源項目

Android App 循環訪問網站app app介紹:http://blog.csdn.net/zengmingen/article/details/78016167 開源地址:https://gitee.com/zengmg/VistWeb

初始化bean(二)—— 緩存部分

上一篇博客,講了下spring如何初始化bean的 當然,當時只討論了很簡單的一種情況:初次加載bean時候,并且只考慮了單例。 這篇博客會試著理清楚spring在加載bean的時候的一部分緩存。關于解決循環引用所使用的緩存,可以看…

chkconfig: 2345 20 80

#chkconfig: 2345 20 80 2345表示系統運行級別是2,3,4或者5時都啟動此服務,20,是啟動的優先級,80是關閉的優先級,如果啟動優先級配置的數太小時如0時,則有可能啟動不成功,因為此時可…

android 按鍵上浮動畫_android – 浮動動作按鈕動畫

從Zielony的回答中,我確切地說到了我想要的地方.下面是正確應用效果的代碼.scale_fab_in.xmlandroid:duration"500"android:fromXScale"0"android:fromYScale"0"android:pivotX"50%"android:pivotY"50%"android:toXScale&qu…

性能測試調優篇---未完待續

性能測試調優一:1.首先,看下選測交易的整個走向純系統內部交易:選測交易如果是系統內的交易,每一步請求都和系統交互幾次,訪問了幾個數據庫,訪問了數據庫的那幾張表??該交易走了那幾…

mysql連接idea詳細教程_idea配置連接數據庫的超詳細步驟

學習時,使用IDEA的時候,需要連接Database,連接時遇到了一些小問題,下面記錄一下操作流程以及遇到的問題的解決方法。一、 連接操作簡介:介紹如何創建連接,具體連接某個數據庫的操作流程。1.1 創建連接打開i…

redis單節點安裝

1、下載 redis :https://redis.io/ redis 提供的是 源碼包,需要編譯。 2、Linux下安裝gcc 和 tcl tcl介紹 命令:yum install gcc tcl 3、將redis的源碼包,放到 /usr/local/src 下 tar -zxvf redis-4.0.6.tar.gz 4、安裝redi…

Shell編程—企業生產案例

Linux系統Shell編程—企業生產案例(一) 企業數據庫可以說是重點保護對象啊,沒有之一,數據在當今企業里就是生命線,因此今天就來說一說,如何通過shell腳本來檢查或監控MYSQL數據庫服務是否正常?&…

ManicTime軟件破解

這款軟件用來記錄電腦上程序的運行時間。方便天天用電腦的查看:今天我的時間都去哪兒了? 專業版不免費,而且需要 67 美元。 免費版和專業版的區別 破解補丁和官方軟件下載(截止博文發布,官方最新版本 版本&#xff1…

mysql根據ID的順序查找_求救:mysql 如何根據給定的 ID順序查找結果?

各位大神,現在我遇到了一個難題需要你們的幫助。有下面兩個表post表:文章表。record表:記錄表,用于記錄用戶閱讀順序。record表 根據用戶的閱讀文章順序用一個字段 postid 記錄 post 表的主鍵ID,既 record.postid 的外鍵為 post.i…

DIY—USB學習板設計以及驅動開發

暑假在Intel OTC做訪問學者時,看到公司有兩個小巧的USB設備-溫度計和LED音樂播放器,用于交大學生的Linux Kernel教學中。但看似簡單的這些設備,還是從國外購買而得。因此,從intel回來之后,我就告訴學生能否設計一種USB…

ps -ef |grep

[rootzengmg 6379]# ps -ef | grep redisroot 1978 1 0 09:35 ? 00:00:16 /usr/local/bin/redis-server 127.0.0.1:6379 root 116656 2708 0 15:56 pts/1 00:00:00 grep redis 字段含義如下: UID PID PPID CSTIME…

python入坑指南_Rust入坑指南:萬物初始

有沒有同學記得我們一起挖了多少個坑?嗯…其實我自己也不記得了,今天我們再來挖一個特殊的坑,這個坑可以說是挖到根源了——元編程。元編程是編程領域的一個重要概念,它允許程序將代碼作為數據,在運行時對代碼進行修改…

python和noip的區別_【noi與noip的區別】

什么是NOINOI:全國青少年信息學奧林匹克(NOI)是國內包括港澳在內的省級代表隊高水平的大賽,自1984年至今,在國內包括香港、澳門組織競賽活動。每年經各省選拔產生5名選手(其中一名是女選手),由中國計算機學會在計算機普及較好的城…

gradle和maven區別

原文連接:http://blog.csdn.net/jueane/article/details/50383431 --------------------------------------------- Gradle和Maven都是項目自動構建工具,編譯源代碼只是整個過程的一個方面,更重要的是,你要把你的軟件發布到生產…

iOS開發提問題

1、打造最受企業歡迎的iOS開發者: 一直都存在的問題,什么樣的員工最受企業歡迎?一直也有人在努力提升自己,成為受企業歡迎的員工然而,我們應該往方向去提升自己呢?88家知名企業今年來iOS面試題合集&#xf…