《深入浅出Nodejs》笔记——模块机制(2)
前言
書上還有很大一部分講了C/C++模塊的編譯過程、核心模塊編寫和C/C++擴展模塊的內(nèi)容,不過我對C++一竅不通因此沒有仔細看,如果以后需要再自習看吧。
包與NPM
第三方模塊中,模塊和模塊之間是散列在各地的,互相之間不能直接引用。而在模塊之外,包和NPM則是將模塊聯(lián)系起來的一種機制。
CommonJS的包規(guī)范定義其實也十分簡單,它由包結(jié)構(gòu)和包描述文件兩個部分組成,前者用于組織包中的各種文件,后者用于描述包的相關(guān)信息,以供外部讀取分析。
包結(jié)構(gòu)
包實際上是一個存檔文件,即一個目錄直接打包為.zip或tar.gz格式的文件,安裝后解壓還原為目錄,完全符合CommonJS規(guī)范的包結(jié)構(gòu)應該包含如下這些文件:
- package.json 包描述文件
- bin 存放可執(zhí)行二進制文件
- lib 存放js代碼
- doc 存放文檔
- test 存放單元測試用例代碼
包描述文件與NPM
包描述文件用于表達非代碼相關(guān)的信息,它是一個JSON格式的文件——package.json,位于包的根目錄下。文件中的字段就不放上來了(字太多了);
NPM常用功能
1.查看幫助
安裝Node之后,執(zhí)行npm -v可以查看當前NPM版本:
執(zhí)行NPM查看幫助引導說明:
使用npm help <command>可以查看具體命令說明,執(zhí)行命令后會在瀏覽器打開一個說明文檔。
2.安裝系統(tǒng)依賴包
安裝系統(tǒng)依賴包是NPM最常見的用法,它的執(zhí)行語句是npm install <packageName>。執(zhí)行命令后Node會在當前目錄下創(chuàng)建node_modules目錄(如果當前目錄下不存在這個目錄),然后在node_modules中創(chuàng)建對應包名的目錄,然后將壓縮包解壓到這個目錄下。安裝好依賴包后就可以通過require(<packageName>)來引入包。
全局模式安裝
如果包中含有命令行工具,那么需要執(zhí)行npm install <packageName> -g來進行全局模式安裝。
全局模式這個稱謂具有誤導性,全局模式安裝并不是將一個模塊包安裝為一個全局包,它并不意味著可以從任何地方用require()引用到這個模塊。它實際上是將一個包安裝位全局可用的可執(zhí)行命令,它根據(jù)包描述文件中的bin字段配置,將實際腳本鏈接帶與Node執(zhí)行文件相同的路徑下。
通過全局模式安裝的包都被安裝進了一個同一目錄下,這個目錄可以用如下方式推算出來:
path.resolve(process.execPath, '..', '..', 'lib', 'node_modules');從本地安裝
對于一些沒有發(fā)布到NPM上或者因為網(wǎng)絡原因沒下載的包,可以通過將包下載到本地,然后以本地安裝。本地安裝只需為NPM指明package.json文件所在的位置即可:它可以是一個包含package.json的存檔文件,也可以是一個URL地址,也可以是一個目錄下有package.json文件的目錄位置:
npm install <tarball file> npm install <tarball url> npm install <folder>從非官方源安裝
如果不能通過官方源安裝,可以通過鏡像源安裝。在執(zhí)行命令時,添加--registry=http://registry.url即可,示例如下:
npm install underscore --registry=http://registry可以指定默認源:
npm config set registry http://registry.url3.NPM鉤子命令
4.發(fā)布包
編寫模塊
//hello.js exports.sayHello = function () {return 'Hello, world.'; }初始化包描述文件
可以在包目錄下使用npm init來生成package.json文件:
注冊包倉庫帳號
執(zhí)行npm adduser然后按順序進行即可。
上傳包
在package.json文件所在目錄下,執(zhí)行npm publish。
安裝包
執(zhí)行npm install <packageName> --registry=https://registry.npmjs.org/。
管理包權(quán)限
npm owner ls <packageName> npm owner add <user> <packageName> npm owner rm <user> <pacjageName>分析包
npm ls可以列出當前路徑下能夠通過模塊路徑找到的所有包,并生成依賴樹:
局域NPM
NPM潛在問題
前后端共用模塊
轉(zhuǎn)載于:https://www.cnblogs.com/FJH1994/p/5865024.html
總結(jié)
以上是生活随笔為你收集整理的《深入浅出Nodejs》笔记——模块机制(2)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pycharm安装pip pip安装第三
- 下一篇: 雅虎开源发布/订阅消息平台Pulsar