《深刻淺出Nodejs》筆記——模塊機制(2)

前言

書上還有很大一部分講了C/C++模塊的編譯過程、核心模塊編寫和C/C++擴展模塊的內容,不過我對C++一竅不通所以沒有仔細看,若是之後須要再自習看吧。javascript

包與NPM

第三方模塊中,模塊和模塊之間是散列在各地的,互相之間不能直接引用。而在模塊以外,包和NPM則是將模塊聯繫起來的一種機制。
CommonJS的包規範定義其實也十分簡單,它由包結構和包描述文件兩個部分組成,前者用於組織包中的各類文件,後者用於描述包的相關信息,以供外部讀取分析。java

包結構

包其實是一個存檔文件,即一個目錄直接打包爲.zip或tar.gz格式的文件,安裝後解壓還原爲目錄,徹底符合CommonJS規範的包結構應該包含以下這些文件:node

  • package.json 包描述文件
  • bin 存放可執行二進制文件
  • lib 存放js代碼
  • doc 存放文檔
  • test 存放單元測試用例代碼

包描述文件與NPM

包描述文件用於表達非代碼相關的信息,它是一個JSON格式的文件——package.json,位於包的根目錄下。文件中的字段就不放上來了(字太多了);npm

NPM經常使用功能

1.查看幫助

安裝Node以後,執行npm -v能夠查看當前NPM版本:
npm-vjson

執行NPM查看幫助引導說明:
npm後端

使用npm help <command>能夠查看具體命令說明,執行命令後會在瀏覽器打開一個說明文檔。瀏覽器

2.安裝系統依賴包

安裝系統依賴包是NPM最多見的用法,它的執行語句是npm install <packageName>。執行命令後Node會在當前目錄下建立node_modules目錄(若是當前目錄下不存在這個目錄),而後在node_modules中建立對應包名的目錄,而後將壓縮包解壓到這個目錄下。安裝好依賴包後就能夠經過require(<packageName>)來引入包。網絡

全局模式安裝

若是包中含有命令行工具,那麼須要執行npm install <packageName> -g來進行全局模式安裝。工具

全局模式這個稱謂具備誤導性,全局模式安裝並非將一個模塊包安裝爲一個全局包,它並不意味着能夠從任何地方用require()引用到這個模塊。它其實是將一個包安裝位全局可用的可執行命令,它根據包描述文件中的bin字段配置,將實際腳本連接帶與Node執行文件相同的路徑下。單元測試

經過全局模式安裝的包都被安裝進了一個同一目錄下,這個目錄能夠用以下方式推算出來:

path.resolve(process.execPath, '..', '..', 'lib', 'node_modules');

從本地安裝

對於一些沒有發佈到NPM上或者由於網絡緣由沒下載的包,能夠經過將包下載到本地,而後以本地安裝。本地安裝只需爲NPM指明package.json文件所在的位置便可:它能夠是一個包含package.json的存檔文件,也能夠是一個URL地址,也能夠是一個目錄下有package.json文件的目錄位置:

npm install <tarball file>
npm install <tarball url>
npm install <folder>
從非官方源安裝

若是不能經過官方源安裝,能夠經過鏡像源安裝。在執行命令時,添加--registry=http://registry.url便可,示例以下:

npm install underscore --registry=http://registry

能夠指定默認源:

npm config set registry http://registry.url

3.NPM鉤子命令

4.發佈包

編寫模塊
//hello.js
exports.sayHello = function () {
    return 'Hello, world.';
}
初始化包描述文件

能夠在包目錄下使用npm init來生成package.json文件:

註冊包倉庫賬號

執行npm adduser而後按順序進行便可。

上傳包

在package.json文件所在目錄下,執行npm publish

安裝包

執行npm install <packageName> --registry=https://registry.npmjs.org/

管理包權限
npm owner ls <packageName>
npm owner add <user> <packageName>
npm owner rm <user> <pacjageName>
分析包

npm ls能夠列出當前路徑下可以經過模塊路徑找到的全部包,並生成依賴樹:

局域NPM

NPM潛在問題

先後端共用模塊

相關文章
相關標籤/搜索