NodeJs:“require” 函數詳解,懂這個你就懂NodeJs了


背景

這篇文基本都是反對的,反對的很有道理,不是說我這篇文章的內容錯誤,因為這篇文章是我在健身房學習node的時候寫的,這些知識都很粗糙,后來發現官方的穩定更詳細:地址:http://nodejs.org/api/modules.html

一直想在服務器端使用一種語言,ruby、phthon和php也都學過,對於我來說使用這三種語言需要一定的上下文切換成本。正在我糾結的時候,NodeJs出現了,而且我自信對Javascript還是比較熟悉的,因此就准備學習一下NodeJs。這樣我的語言組合為:C#、Javascript和NodeJs,全是C Style,幾乎沒有切換成本。

NodeJs

網上關於NodeJs的論述很多,此處不多說。個人認為,NodeJs的編程思想和客戶端Javascript保持了一種理念,沒有什么變化,只是增加了“require()”函數,因此只要學好require函數,剩下的問題就是如何更好的使用API了。

require函數詳解

路徑

    • 相對路徑之當前目錄:./xxx/xxx.js 或 ./xxx/xxx。
    • 相對路徑之上級目錄:../xxx/xxx.js 或 ../xxx/xxx。
    • 絕對路徑:F:/xxx/xxx.js 或 /xxx/xxx.js 或 /xxx/xxx。

require函數語法

require(路徑.擴展名):

如果 路徑.擴展名 存在

執行加載 並 返回

否則

拋出異常

require(路徑):

如果 路徑.js 存在

執行加載 並 返回

如果 路徑.node 存在

執行加載 並 返回

如果 路徑/package.json 存在

執行加載(package.json 中 main屬性對應的路徑) 並 返回

如果 路徑/index.js 存在

執行加載 並 返回

如果 路徑/index.node 存在

執行加載 並 返回

拋出異常

require(模塊名字):

如果 模塊名字是系統模塊

執行加載 並 返回

如果 require(./node_modules/模塊名字) 能加載到模塊  //參考require(路徑)的介紹

執行加載 並 返回

如果 require(../node_modules/模塊名字) 能加載到模塊  //參考require(路徑)的介紹

執行加載 並 返回

沿着目錄向上逐級執行require(上級目錄/node_modules/模塊名字),如果能加載到模塊  //參考require(路徑)的介紹

執行加載 並 返回

拋出異常

代碼示例

文件結果

 

require_study.js中的代碼

 1 require('module_1_1.js');
 2 require('module_1_2');
 3 require('../node_modules/module_2_1.js');
 4 require('../node_modules/module_2_2');
 5 require('../package_2_1');
 6 require('package_3_1');
 7 require('./node_modules/package_3_2');
 8 require('module_3_1');
 9 require('/node_study/level1/level2/level3/node_modules/module_3_1');
10 require('module_3_2');
11 require('/node_study/level1/level2/level3/package_3_3');
12 require('./package_3_4');
13 require('./module_3_3');
14 require('same_name_module');
15 require('same_name_package');
16 require('same_name_module_and_package');

輸出結果

 1 module_1_1.js
 2 module_1_2.js
 3 module_2_1.js
 4 module_2_2.js
 5 package_2_1
 6 package_3_1
 7 package_3_2
 8 module_3_1.js
 9 module_3_2.js
10 package_3_3
11 package_3_4
12 module_3_3.js
13 same_name_module.js in leaf
14 same_name_package in leaf
15 same_name_module_and_package.js in leaf module

 代碼下載:http://yunpan.cn/QWIiPxdZdW8RG

備注

剛接觸NodeJs,還沒有深入學習其API,包括我對require的理解,也不一定正確,歡迎批評和指正。關於require(模塊名字),應該有一個全局查找路徑,今晚我再查查資料。

這篇文章說的更詳細,早知官方有文章,我就不寫了,文章地址:http://nodejs.org/api/modules.html

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM