這篇文章主要介紹“怎么理解Node.js中的包與NPM”,在日常操作中,相信很多人在怎么理解Node.js中的包與NPM問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么理解Node.js中的包與NPM”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
堅守“ 做人真誠 · 做事靠譜 · 口碑至上 · 高效敬業(yè) ”的價值觀,專業(yè)網(wǎng)站建設服務10余年為成都成都玻璃貼膜小微創(chuàng)業(yè)公司專業(yè)提供成都定制網(wǎng)站營銷網(wǎng)站建設商城網(wǎng)站建設手機網(wǎng)站建設小程序網(wǎng)站建設網(wǎng)站改版,從內(nèi)容策劃、視覺設計、底層架構、網(wǎng)頁布局、功能開發(fā)迭代于一體的高端網(wǎng)站建設服務。
摘要:包與NPM Node組織了自身的核心模塊,也使得第三方文件模塊可以有序的編寫和使用。
Node組織了自身的核心模塊,也使得第三方文件模塊可以有序的編寫和使用。
但是在第三方模塊中,模塊與模塊之間仍然是散列在各地的,相互之間不能直接引用
所以在模塊外,包和NPM是將模塊聯(lián)系起來的機制。
包組織模塊示意圖
CommonJS 的包規(guī)范定義其實也很簡單,由包結(jié)構和包描述文件兩部分組成。
用于組織包中的各種文件,是一個存檔文件,即一個目錄直接打包為.zip或tar.gz格式的文件。
符合規(guī)范的包目錄:
package.json: 包描述文件
bin: 用于存放可執(zhí)行二進制文件的目錄
lib: 用于存放JavaScript代碼的目錄
doc: 用于存放文檔的目錄
test: 用于存放單元測試用例的代碼
NPM所有行為都與包描述文件的字段息息相關
一些字段:
name: 包名。 規(guī)范定義需要用小寫的字母和數(shù)字組成,不允許出現(xiàn)空格。 包名必須是唯一的,以免對外公布時產(chǎn)生重名沖突
description: 包簡介
version: 版本號,關于其介紹在《Node.js學習(一)——簡介》也有提及
keywords: 關鍵字數(shù)組, NPM中主要用來作分類搜索。
maintainers: 包維護者列表。 每個維護者由name、email和web這3個屬性組成。 NPM通過這個屬性進行權限認證。
格式:
"maintainers":[{ "name":"kongchengji", "email":"111@.com", "web":"[http:](https://blog.csdn.net/qq_36171287)" }]
contributors: 貢獻者列表,格式與維護者列表相同
bugs: 一個可以反饋bug的網(wǎng)頁地址或郵件地址
licenses: 當前包所使用的許可證列表,表示包在哪些許可證下使用
格式:
"licenses":[{ "type": "GPLv2", "url":"" }] // 或者 "license": "ISC"
repositories: 托管源代碼的位置列表,表明可以通過哪些方式和地址訪問包源代碼。
格式:
"repository": { "type": "git", "url": "git+https://github.com/kongchengji/UiSelfMade.git" },
dependencies: 使用當前包所需要依賴的包列表。 這個屬性非常重要
homepage: 當前包的網(wǎng)站地址
os: 操作系統(tǒng)支持列表, 如果列表為空,則不對操作系統(tǒng)做任何假設
cpi: CPU架構支持列表
engine:支持的JavaScript引擎列表
directories:包目錄說明
implements: 實施規(guī)范的列表。 標志當前包實現(xiàn)了CommonJS哪些規(guī)范
scripts: 腳本說明對象。 主要用于被包管理器用來安裝、編譯、測試和卸載包
格式:
"scripts": { "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js", "start": "npm run dev", "lint": "eslint --ext .js,.vue src", "build": "node build/build.js" },
NPM與包規(guī)范區(qū)別在于多了四個字段:
author: 包作者 :ok_man:
bin: 一些包作者希望包可以作為命令行工具使用。
main: 模塊引入包時,會有限檢查這個字段,并將其作為包中其余模塊的入口模塊。 如果不存在,require會查找包目錄下的index.js、index.node、index.json作為默認入口
devDependencies: 一些模塊只在開發(fā)時需要依賴。
devDependencies:開發(fā)環(huán)境使用dependencies:生產(chǎn)環(huán)境使用
JavaScript在Node出現(xiàn)后,有一項優(yōu)勢 --> 一些模塊可以在前后端實現(xiàn)共用。
但是前后端上始終還是有一些差別的 :sweat_drops:
前后端JavaScript分別擱置在HTPP的兩端,扮演的角色并不同。
瀏覽器端的JavaScript需要經(jīng)歷從同一個服務器端分發(fā)到多個客戶端執(zhí)行,瓶頸是帶寬,從網(wǎng)絡加載代碼服務器端的JavaScript是相同代碼需要多次執(zhí)行,瓶頸是CPU和內(nèi)存等資源,從磁盤中加載
在前端JavaScript中,主要還是應用AMD規(guī)范。
CommonJS并不完全適用于前端JavaScript,比如Node的模塊引入基本是同步的,但是前端引入如果使用同步引入,UI在初始化過程中需要花費很多時間等待腳本加載完成。
AMD規(guī)范是CommonJS規(guī)范的一個延伸,全稱:Asynchronous Module Definition。
是異步模塊定義
模塊定義:define(id?,dependencies?, factory);
id 是模塊的名字,它是可選的參數(shù)。
dependencies 指定了所要依賴的模塊列表,它是一個數(shù)組,也是可選的參數(shù)
AMD需要在聲明模塊時指定所有的依賴,通過形參傳遞依賴到模塊內(nèi)容中:
define(['./a', './b'], function (dep1, dep2) { a.doSomethimg() b.doSomething() });
與AMD規(guī)范相對的還有CMD規(guī)范,全稱:CommonModule Definition。
是公共模塊定義
這是由國內(nèi)的玉伯(也是一位大佬)提出的
模塊定義:define(factory)
CMD支持動態(tài)引入:
define(function(require, exports, module) { var a=require('./a') a.doSomethimg() var b=require('./b') b.doSomething() })
在需要依賴模塊時,隨時調(diào)用require()引入即可
CMD 推崇依賴就近; AMD 推崇依賴前置
CMD 是延遲執(zhí)行; AMD 是提前執(zhí)行
CMD性能好,因為只有用戶需要的時候才執(zhí)行; AMD用戶體驗好,因為沒有延遲,依賴模塊提前執(zhí)行了
AMD和CMD最大的區(qū)別是對依賴模塊的執(zhí)行時機處理不同
創(chuàng)建一個hello方法,讓hello方法能在不同運行環(huán)境中運行,兼容Node、AMD、CMD和常見瀏覽器
匿名函數(shù)前加一個;是個好習慣 name是方法名,definition是方法體
通過typeof檢測環(huán)境是否為AMD或CMD還是Node環(huán)境
可以將模塊執(zhí)行結(jié)果掛載在window變量中,這樣可以直接調(diào)用
到此,關于“怎么理解Node.js中的包與NPM”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關知識,請繼續(xù)關注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
當前文章:怎么理解Node.js中的包與NPM
標題路徑:http://weahome.cn/article/iigpsd.html