前置技能
- npm工具為nodejs提供了一個模塊和管理程序模塊依賴的機制,當我們希望把模塊貢獻出去給他人使用時,可以把我們的程序發布到npm提供的公共倉庫中,為了方便模塊的管理,npm規定要使用一個叫package.json的文件來描述我們模塊的名稱、版本等信息。
- 我們貢獻出去的程序模塊,可能也依賴了別人所編寫的模塊,所以需要在package.json中寫明我們依賴了哪些模塊,便於別人安裝。
- 簡單的nodejs程序可以通過 node xxx.js 來運行,當我們希望直接在控制台中使用xxx命令運行nodejs程序時,需要創建一個cmd命令文件(windows下),並把它放到path路徑下,npm提供了一個自動完成這個工作的流程,這個也是在package.json里邊配置的。
基於以上幾點,我覺得有必要挨個理解一下package.json里邊的配置項:我理解翻譯的package.json文檔
模塊發布
發布一個npm模塊非常簡單。
注冊npm賬戶
這個賬戶注冊體驗多好啊,不過記得密碼別搞忘記了。
npm adduser
Username: zoucz
Password: ******
Email: 405966530@qq.com
創建一個測試模塊
新建一個文件夾,npm init,一路enter ,要注意的是name不能是已經被別人搶占的,可以到http://npmjs.org這里查詢。
此時文件夾下會生成一個package.json文件,如果看過package.json里邊配置的含義,這里就比較好理解了。
新建一個index.js,內容如下:
此時模塊就創建完畢了,簡單吧!
發布模塊
在剛剛新建的文件夾下打開cmd,運行npm publish ,模塊發布完畢!
要注意的是每次發布的時候都需要增加版本號。
此時在http://npmjs.org這里就可以查詢到剛剛發布的模塊了,我測試模塊名稱是zoucz,那么此時別人也可以通過 npm install zoucz來使用我發布的模塊了。
開發控制台命令程序
以windows下為例,我們怎么樣才能創建一個cmd命令呢?
1.在環境變量里邊添加一段:";D:/test"
2.在d盤test目錄下創建一個mycmd.cmd文件
這時就可以使用mycmd命令了。那么要怎么在cmd中調用node程序呢? 很簡單:
3.在那個mycmd.cmd文件里邊寫上 node path/to/xxx.js,就可以了。
使用npm創建控制台命令程序,我們不需要自己完成上面的步驟,只需要增加一行配置就可以了
添加要執行的nodejs代碼文件
在模塊根目錄下添加bin目錄
新建zoucz.js內容如下:
#!/usr/bin/env node
var util=require("util");
console.log("hello,i'm zouchegnzhuo,you can type command name/site/email");
var cmd=process.argv[2];
if(cmd){
switch(cmd){
case "name":
console.log("鄒成卓");
break;
case "site":
console.log("http://zoucz.com");
break;
case "email":
console.log("405966530@qq.com");
break;
}
}
要注意的是,文件首行的 #!/usr/bin/env node 一定要添加 ,這一行的意思是生成cmd文件的時候用什么路徑的什么程序來運行上面的代碼,文章末尾的demo中給出了不加的后果。
在package.json中配置bin
在package.json中配置
模塊在npm install的時候會生成zoucz和zoucz_err兩個cmd文件。
發布模塊
添加好上面的配置后,發布模塊,別的碼農就可以安裝使用此命令了。
安裝使用控制台命令程序
在cmd中 npm install -g zoucz ,就可以安裝上面的模塊,安裝完成后可以使用zoucz命令和zoucz_err命令。
zoucz_err是沒有在js文件首行寫#!/usr/bin/env node的后果:
運行命令之后:
我們順着圖片中的路徑,在C:\Users\czzou\AppData\Roaming\npm目錄下可以找到npm為我們創建的cmd文件路徑:
可以看到npm創建cmd文件的同時也創建了linux下使用的文件。
現在來看一下為什么執行zoucz_err會報錯,分別打開兩個cmd文件:
zoucz.cmd
zoucz_err.cmd
后者壓根就沒有用node去執行那段代碼,當然會報錯了~
這里要注意的是npm install -g 全局安裝的時候,cmd文件是被創建在上面的路徑下的,如果沒有-g選項,局部安裝,則會被創建在項目根目錄node_modules/.bin 目錄下。
最后
npm可以幫我們做很多事情,做node開發的同學們都有必要花時間慢慢把npm的文檔啃完https://docs.npmjs.com
本文所使用的demo地址:https://github.com/zouchengzhuo/nodejsLearn/tree/master/zoucz
本文轉自我的個人網站,原文地址,歡迎前往交流討論