最近嘗試著整理了自己的代碼芝加,找到了一些通用的組件方法函數(shù)之類的备畦。想著這些東西也許可以封裝一下,打包上傳npm仁期,這樣自己以后也可以像引用別人的代碼一樣引用自己的了桑驱,豈不美哉竭恬?想到就做,經(jīng)過一些準備熬的,踩過一些坑之后痊硕,終于成功的發(fā)布了自己的第一個npm測試包(后來又刪掉了,畢竟只是測試包悦析,沒必要污染環(huán)境...)寿桨,下面簡單說一下我的發(fā)布流程以及一些踩過的坑。
準備遠程倉庫(便于之后的更新與維護)
登錄github强戴,新建一個遠程代碼倉庫亭螟。并clone到本地
準備本地文件
本地遷入已經(jīng)準備好的項目文件并上傳遠程倉庫;
執(zhí)行npm init骑歹,在這里會讓你填寫一些對你要發(fā)布npm包的信息预烙,例如包名、版本(包名理論上只要不和已有包重名就沒問題道媚,版本可以隨便寫扁掸,不過兩者都有自己的命名規(guī)范,最好還是按規(guī)矩來最域,這個具體可以自行百度npm包名谴分、版本命名規(guī)范)。在npm init之后镀脂,你的項目根目錄里就會有package.json文件了牺蹄。此時如果你的文件沒有問題就可以正式發(fā)布了。
ps:版本命名規(guī)范
patch: 小改動薄翅,比如修個bug什么的沙兰,版本號變動: v1.0.0->v1.0.1
minor:增加新功能,不影響現(xiàn)有功能翘魄,版本號變動v1.0.0->v1.1.0
major:破壞模塊向后的兼容性鼎天,版本號變動:v1.0.0->v2.0.0
切換npm源(已經(jīng)是官方源的可以跳過)
首先運行npm get registry命令,確認npm源暑竟。一般來說國內(nèi)大部分都設(shè)置的是淘寶鏡像斋射,如果檢查結(jié)果是https://registry.npmjs.org/官方源的話那這步可以省略了。
切換命令:npm config set registry?https://registry.npmjs.org/
記得發(fā)布完后切回淘寶鏡像:npm config set registry http://registry.npm.taobao.org/
準備npm賬號(已經(jīng)有的可以跳過)
注冊賬號的方法有兩種:
一光羞、去官網(wǎng)注冊(推薦)绩鸣;
二、運行npm adduser纱兑,依次輸入Username呀闻、Password、Email完成注冊(這個我沒試潜慎,看網(wǎng)上說有可能不會成功)捡多。
準備好賬號之后蓖康,運行npm login命令,輸入賬戶名垒手、密碼蒜焊、email之后成功登陸,可以運行npm whoami命令確認是否登錄科贬。
發(fā)布npm包
運行npm publish泳梆,這個沒啥好說的。
ps:關(guān)于npm包的一些其他操作(24小時內(nèi)可撤銷)
npm? ??unpublish? ? test? ? ? ? ? ? ? ? ? ? ? ? ? //撤銷已發(fā)布的包?
npm? ? unpublish? ? test? ? ?--force? ? ? ? ? //強制撤銷
npm? ? unpublish? ? test@1.0.2? ? ? ? ? ? ?//可以撤銷發(fā)布自己發(fā)布過的某個版本的代碼?
踩的一些坑
總的來說榜掌,過程不復(fù)雜优妙,但無奈我就是一個愛踩坑的人,在這里記錄一下憎账。
npm源的問題:我一開始是淘寶的鏡像套硼,登錄成功后,發(fā)布提示報錯胞皱,這個報錯還算明顯邪意,很快明白了問題所在并解決了這個問題。
npm publish發(fā)布失敺雌觥:這個報錯不是很明顯
npm ERR! 403 403 Forbidden - PUT http://registry.npmjs.org/hello_test_npm - You do not have permission to publish "xxx". Are you logged in as the correct user?
npm ERR! 403 In most cases, you or one of your dependencies are requesting
npm ERR! 403 a package version that is forbidden by your security policy.
這個問題困擾我很長一陣時間雾鬼,最先定位的是包名跟npm上已有包名的沖突問題,但是在npm上并沒有發(fā)現(xiàn)我的包名有人用過宴树。然后看到可能是因為項目名稱與包名不能相同(至今不知道這個到底會不會報錯)呆贿,于是修改了項目名稱,無效森渐;懷疑是版本名稱不規(guī)范,修改后無效冒晰;最后懷疑是node版本問題同衣,遂去升級了node.js(這里又踩了一些坑,建議就直接卸載重裝吧壶运,以此避開平穩(wěn)升級node的坑)耐齐,依舊無效。直到后來開始懷疑是自己賬號問題蒋情,經(jīng)過一番確認埠况,沒有驗證npm賬號郵箱...驗證成功后發(fā)布成功。