書上還有很大一部分講了C/C++模塊的編譯過程、核心模塊編寫和C/C++擴展模塊的內容,不過我對C++一竅不通所以沒有仔細看,若是之後須要再自習看吧。javascript
第三方模塊中,模塊和模塊之間是散列在各地的,互相之間不能直接引用。而在模塊以外,包和NPM則是將模塊聯繫起來的一種機制。
CommonJS的包規範定義其實也十分簡單,它由包結構和包描述文件兩個部分組成,前者用於組織包中的各類文件,後者用於描述包的相關信息,以供外部讀取分析。java
包其實是一個存檔文件,即一個目錄直接打包爲.zip或tar.gz格式的文件,安裝後解壓還原爲目錄,徹底符合CommonJS規範的包結構應該包含以下這些文件:node
包描述文件用於表達非代碼相關的信息,它是一個JSON格式的文件——package.json,位於包的根目錄下。文件中的字段就不放上來了(字太多了);npm
安裝Node以後,執行npm -v
能夠查看當前NPM版本:
json
執行NPM
查看幫助引導說明:
後端
使用npm help <command>
能夠查看具體命令說明,執行命令後會在瀏覽器打開一個說明文檔。瀏覽器
安裝系統依賴包是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
//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
能夠列出當前路徑下可以經過模塊路徑找到的全部包,並生成依賴樹: