?在上一篇文章中有提到,Node模塊分為核心模塊和文件模塊,接下來就簡單總結一下文件模塊。
文件模塊則是在運行時動態加載,需要完整的路徑分析、文件定位、編譯執行過程、速度相比核心模塊稍微慢一些,但是用的非常多。這些模塊需要我們自己定義或者引用第三方的模塊,所以文件模塊有可以分為自定義模塊和第三方模塊。
CommonJs
?JavaScript 是一個強大面向對象語言,它有很多快速高效的解釋器。然而, JavaScript標準定義的 API 是為了構建基于瀏覽器的應用程序。并沒有制定一個用于更廣泛的應用程序的標準庫。CommonJS 規范的提出,主要是為了彌補當前 JavaScript 沒有標準的缺陷。它的終極目標就是:提供一個類似 Python,Ruby 和 Java 語言的標準庫,而不只是停留在小腳本程序的階段。用 CommonJS API 編寫出的應用,不僅可以利用 JavaScript 開發客戶端應用,而且還可以編寫以下應用:
- 服務器端 JavaScript 應用程序。(nodejs)
- 命令行工具。
-
桌面圖形界面應用程序。
CommonJS 就是模塊化的標準,nodejs 就是 CommonJS(模塊化)的實現
CommonJS(Nodejs)中關于自定義模塊有如下規定:
- 我們可以把公共的功能抽離成為一個單獨的 js 文件作為一個模塊,默認情況下面這個模塊里面的方法或者屬性,外面是沒法訪問的。如果要讓外部可以訪問模塊里面的方法或者屬性,就必須在模塊里面通過 exports 或者 module.exports 暴露屬性或者方法。
- 在需要使用這些模塊的文件中,通過 require 的方式引入這個模塊。這個時候就可以使用模塊里面暴露的屬性和方法。
Node 應用由模塊組成,采用 CommonJS 模塊規范。
自定義模塊
我們可以把公共的功能抽離成為一個單獨的 js 文件作為一個模塊,默認情況下面這個模塊里面的方法或者屬性,外面是沒法訪問的。如果要讓外部可以訪問模塊里面的方法或者屬性,就必須在模塊里面通過 exports 或者 module.exports 暴露屬性或者方法。
在需要使用這些模塊的文件中,通過 require 的方式引入這個模塊。這個時候就可以使用模塊里面暴露的屬性和方法(在引入js文件的時候,文件后綴可以省略)
module.exports和exports的區別
exports
??
?
module.exports
???
??
node_modules
?在上面的例子中,我們是將自定義模塊直接放在根目錄下面的,但是如果在默認的目錄下面沒有找到指定的模塊時,nodejs會主動到node_modules里面找這個模塊。
所以,首先在根目錄下面新建一個文件夾node_modules,在這個文件夾中添加一個自定義模塊
??
??
node_modules不僅支持尋找自定義模塊,也支持尋找文件夾
在node_modules下新建文件夾test,將剛剛的test.js移入到改文件夾中。
?
然后只需要修改一下com03.js就可以了
執行com03.js的時候,會請求require里面的文件,在默認的里面,沒有找到test路徑下面的test.js,就會重新到node_modules里面去尋找test文件夾,找到文件夾以后再該文件夾里面找test.js
第三方模塊
?Nodejs中第三方模塊由包組成,可以通過包來對一組具有相互依賴關系的模塊進行統一管理。
npm
在nodejs中通過NPM命令在下載第三方的模塊(包),npm是世界上最大的開放源代碼的生態系統,我們可以在https://www.npmjs.com中找到各種各樣的包,并通過npm安裝到我們的項目中,下面以jQuery為例,展示npm的基本用法:
npm版本查看:npm -v
模塊安裝:npm install jquery
模塊卸載:npm uninstall jauery
查看已安裝模塊:npm list
查看版本:npm info jquery
指定版本安裝:npm install jquery@1.8.0
package.json
package.json 定義了一個項目所需要的各種模塊,以及項目的配置信息(比如名稱、版本、許可證等元數據)
創建package.json
可以使用命令npm init 或者npm init --yes(所有配置項全部默認,不在一項一項的詢問)在項目中生成package.json
當我們在安裝模塊的時候,將模塊寫入package.json里面的話,后期拷貝項目就不需要拷貝node_modules這個文件夾了,再次使用這個項目的時候,只需要執行npm install,就會根據package.json這個文件里面的模塊依賴自動下載之前安裝過的模塊了。
--save-dev 和--save
?--save-dev和--save都能在安裝模塊的時候將模塊寫入package.json中,但是兩者又有區別:
執行上面的命令,使用兩種方式分別安裝了兩個模塊,然后打開package.json:
現在可以看到,通過--save安裝的模塊,加入到dependencie中了;而通過--save-dev安裝的模塊,則加入到devDependencie中了。這兩個的區別在于:dependencie 配置當前程序所依賴的其他包。devDependencie 配置當前程序所依賴的其他包,只會下載模塊,而不下載這些模塊的測試和文檔框架。
版本更新
?使用 npm install node_module –save 自動更新 dependencies 字段值;使用 npm install node_module –save-dev 自動更新 devDependencies 字段值;
在上面的截圖中,每個版本號都是用^開頭的,這個是可修改的:^表示第一位版本號不變,后面兩位取最新的;~表示前兩位不變,最后一個取最新;*表示全部取最新。