Node.js的模塊系統
Node.js中使用"Module(模塊)"來規劃不一樣的功能對象。
模塊的分類:
(1)核心模塊——nodejs的內置模塊node
(2)第三方模塊(https://www.npmjs.com 經常使用的第三方模塊:express、less、grunt...)
(3)自定義模塊: 每個被加載的.js文件對應一個模塊對象,包含相應的功能和函數。
模塊中聲明的變量或函數的做用域是「模塊做用域」,不是golbal的成員,默認只能在當前js文件(即當前模塊)中使用。
Node.js啓動時運行的第一個模塊,稱爲「主模塊」。——mail module,也是自身模塊。
除主模塊以外的其餘模塊,稱爲「子模塊」。
獲取主模塊對象:process.mainModule require.main
每個模塊均可以導出(exports)本身內部的對象供其餘模塊使用,也能夠引入(require)並使用其餘模塊中導出的對象。
每個模塊內部均可以使用一個變量叫「module」,指向當前模塊本身。
判斷當前模塊是不是主模塊:module===process.mainModuleexpress
建立模塊:文件式自定義模塊npm
加載模塊:其餘js文件中調用json
預約義的模塊做用域成員:
__dirname 當前模塊文件所在的目錄
__filename 當前模塊文件所在目錄及文件名
module 指向當前模塊的引用
module.exports 指向當前模塊中待導出的供其餘模塊使用的對象
exports 指向module.exports對象的引用
require 引入其餘模塊,使用其餘模塊的module.exports對象
自定義模塊:
(1)文件模塊
沒有後綴的文件模塊,被做爲js文件加載;.js後綴的文件模塊,被做爲js文件加載; .json後綴的文件模塊,被做爲JSON字符串加載,自動轉換爲對象;.node後綴的文件模塊,被做爲C/C++二進制加載;數組
(2)目錄模塊:在引入是隻須要引入目錄名的四種形式:
包含package.json文件的目錄:package.json中包含一個main屬性,指向該模塊的js文件——> {"main":"xx.js"};
包含index.js文件的目錄;
包含index.json文件的目錄;
包含index.node文件的目錄;
模塊查找順序:(1)文件/目錄模塊的緩存;(2)原生模塊的緩存;(3)原生模塊;(4)文件/目錄模塊;
包(package):是根據CommonJS規範,對模塊進行標準封裝;
包規範:包是一個目錄;目錄中包含一個包說明文件package.json,存放於包頂級目錄下;目錄中包含js文件,放在lib目錄下,若是有index.js,能夠放到頂級目錄下;二進制文件應該放到bin目錄下;文檔應該放到doc目錄下;單元測試文件應該放到test目錄下;
CommonJS規範要求,包應該位於當前目錄或者父目錄下的node_modules文件夾下,require函數由近及遠進行查找。
npm——包管理器
Node.js的包管理工具,用於下載、安裝、升級、刪除包,或者發佈並維護包。
npm官網:www.npmjs.com
包的下載安裝:
(1)下載到當前目錄:npm install 包名 會安裝到指定目錄下的node_modules文件夾下 查看目標路徑:npm root
(2)下載到全局:npm install 包名 -g 會下載到npm目錄下 查看目標路徑:npm root -g
包的生成:使用npm init 命令能夠在當前目錄下生成一個package.json文件;
包的發佈:將自定義的包發佈到npmjs.com上:
(1)在www.npmjs.com註冊帳號;
(2)使用npm adduser命令註冊或者登錄已有帳號;
(3)進入到配置完成的包目錄,使用npm publish命令發佈包;
(4)搜索或下載使用;
更新包:npm update 包名; 刪除包:npm uninstall 包名;
Node.js核心模塊
一、console
global.console 用於向stdout和stderr執行輸出
console class console模塊中的Console構造函數,能夠向任意輸出流(文件)中執行輸入
二、Query String:提供了處理url中「查詢字符串」部分的相關操做
parse() //從查詢字符串中解析出數據對象,參數爲要解析的查詢字符串
stringify() //將數據對象轉換爲查詢字符串格式,參數1,要轉換的對象;可選參數2,指向鍵值對之間的分隔符;可選參數3,執行鍵和值之間的分隔符;緩存
三、Url模塊: 提供了處理url中不一樣部分的相關操做
parse() //解析出url中的各個組成部分,參數1:要解析的url字符串;可選參數2:將查詢字符串部分(query)解析爲對象,值爲true或false
format() //將對象反向格式化爲url格式,參數爲url對象
resolve() //根據基地址解析出相對url,參數1:基地址;參數2,相對地址服務器
四、Path模塊:提供了對文件路徑進行操做的相關方法
parse() //解析一個路徑爲對象,參數爲路徑字符串
format() //將路徑對象格式化爲字符串,參數爲路徑對象
resolve() //根據基礎路徑解析出一個目標路徑的絕對地址,參數1:基礎路徑;參數2,目標路徑
relative() //根據基礎路徑,獲取目標路徑與其的相對關係,參數1:基礎路徑;參數2,目標路徑app
五、Dns模塊: 提供了域名到IP地址的雙向解析功能
lookup() //將一個域名解析爲IP地址,從操做系統中查詢(緩存)
resolve() //將一個域名解析爲一個dns記錄解析數組,從dns服務器上查詢
reverse() //把一個IP地址反向解析爲一組域名(不少狀況下解析不出來你沒)less
六、Util模塊:工具模塊
format() //使用帶佔位符的方式格式化字符串
inspect() //返回一個對象的字符串表示
inherits() //實現構造方法之間的繼承異步
七、Buffer: 緩衝區,一塊專用於存儲數據的內存區域;它是全局對象Global的成員,使用時無需引入。
八、fs模塊:fs模塊提供了文件讀寫、改名、刪除、遍歷目錄等操做
經常使用class:
fs.stats //文件或目錄的統計信息描述對象
fs.ReadStream //stream.Readable接口的實現對象
fs.WriteStream //stream.Writeable接口的實現對象
fs.FSWatcher //可用於監視文件修改的文件監視器對象
---------------------------------------------------------------------------------------
經常使用方法:
fs.mkdir() //建立目錄
fs.rmdir() //刪除目錄
fs.readdir() //讀取目錄下的內容
fs.readFile() //讀取文件的內容
fs.writeFile() //向文件中寫入內容
fs.appendFile() //向文件中追加內容
fs.unlink() //刪除文件
fs.rename() //重命名文件
fs.stat() //用於返回一個文件或目錄的統計信息對象(fs.stats對象)
以上方法中都有異步和同步(Sync)兩種;全部的異步方法都有一個回調函數,回調函數中的第一個參數都是I/O錯誤對象err
---------------------------------------------------------------------------------------
fs.stat() & fs.statSync() //用於返回一個文件或目錄的統計信息對象(fs.stats對象)
fs.stats對象方法:
stats.isFile() //是否爲文件
stats.isDirectory() //是否爲目錄
---------------------------------------------------------------------------------------
操做目錄:
fs.mkdir() & fs.mkdirSync() //建立目錄
fs.rmdir() & fs.rmdirSync() //刪除目錄
fs.readdir() & fs.readdirSync() //讀取目錄下的內容