背景
這篇文基本都是反對的,反對的很有道理,不是說我這篇文章的內容錯誤,因為這篇文章是我在健身房學習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。