前言
有時候我們想把自己的組件像在github
上提供的以npm
方式安裝到本地的方式給別人用驻右,我們就可以到npm官方網(wǎng)站注冊自己的賬號并以CLI
的形式將自己的代碼發(fā)布到npm官方倉庫
唉俗。
但是粘拾,目前來說炭序,我們可以發(fā)布到npm官方倉庫
的組件或庫都是公開的,這意味著是開源的酣胀,也就是任何人都可以搜索到你發(fā)布的這個倉庫并且安裝使用信卡。
官方目前提供2
種方式,一種是免費的幔妨,也就是我們剛才說的公開的鹦赎,這種方式不會限制你發(fā)布多少包到npm
,你發(fā)布十個误堡、百個甚至上千個都行古话,只要你開心,想發(fā)就發(fā)锁施;另一種方式是收費的陪踩,具體的價格npm官方價格說明杖们,當然,這種收費的好處是肩狂,我們可以發(fā)布私有倉庫摘完,這種私有倉庫別人未經(jīng)授權是看不到摸不著。如果你只是想把自己的組件開源給別人用傻谁,發(fā)揚開源精神孝治,那么使用免費的就可以了,如果你不想提供給別人用栅螟,比如說是公司內(nèi)部的一些業(yè)務組件荆秦、功能組件等,那么除了npm
官方收費的方式以外力图,也有一些其他創(chuàng)建私有npm倉庫的方式步绸。但是在這篇文章中,只講發(fā)布免費版的倉庫吃媒。
注冊
首先第一件事就是注冊瓤介,你必須擁有一個npm賬號才能發(fā)布包,這是一個必須的步驟赘那。
- 1.npm官方網(wǎng)站刑桑,點擊
Sign Up
- 2.填寫注冊信息,然后點擊
Create an Account
- 3.登錄郵箱募舟,將類似紅框中的鏈接復制到你的瀏覽器中祠斧,回車,驗證完畢
- 4.注冊成功拱礁,你將看到如下界面
創(chuàng)建&發(fā)布包
- 1.打開
terminal
琢锋,隨便找一個文件夾作為測試倉庫,執(zhí)行npm adduser
圖中的
langke_npm
是我自己隨便創(chuàng)建的文件夾呢灶,你也可以自己隨意命名創(chuàng)建吴超,開心就好。另外鸯乃,你也可以使用npm login
來代替命令npm adduser
鲸阻,兩者并沒有什么區(qū)別,如果不信缨睡,那就看這里見識一下官方npm login & npm adduser鸟悴。然后,輸入用戶名宏蛉、密碼遣臼、郵箱,注意拾并,輸入密碼的時候你是看不見的揍堰,這是terminal
為了保護你的安全鹏浅,做了隱藏,出現(xiàn)類似Logged in as langke007 on http://registry.npmjs.org/.
屏歹,你已經(jīng)登錄成功隐砸。
- 2.初始化倉庫,執(zhí)行
npm init
執(zhí)行
npm init
后蝙眶,會填寫一些相應信息季希,根據(jù)提示填寫即可,沒什么難度幽纷,結束后會生成一個package.json
文件式塌,里面就包含你填寫的所有信息。
- 3.創(chuàng)建
README.md
友浸、index.js
文件
- 4.發(fā)布峰尝,執(zhí)行
npm publish
? langke_npm npm publish
npm notice
npm notice ?? langke_npm_demo@1.0.0
npm notice === Tarball Contents ===
npm notice 60B index.js
npm notice 292B package.json
npm notice 33B README.md
npm notice === Tarball Details ===
npm notice name: langke_npm_demo
npm notice version: 1.0.0
npm notice package size: 410 B
npm notice unpacked size: 385 B
npm notice shasum: 730c17ff5fd22e05d0a1e05088b74066667c292d
npm notice integrity: sha512-+80RanxwwDwTv[...]ZJDWYN+EDm37w==
npm notice total files: 3
npm notice
+ langke_npm_demo@1.0.0
進入到網(wǎng)頁,你就可以看到剛才所發(fā)布的包收恢,具體見上圖武学。如果發(fā)布遇到類似
npm ERR! no_perms Private mode enable, only admin can publish this module
的錯誤,應該是鏡像源的問題伦意,使用官方鏡像源火窒,執(zhí)行npm config set registry http://registry.npmjs.org
。
使用剛才發(fā)布的包
我這里是React Native
項目驮肉,但是都是一樣的道理熏矿,到根目錄下執(zhí)行
- 1.安裝
npm install langke_npm_demo
然后在項目中的文件里導入
- 2.使用
import {printHello} from 'langke_npm_demo';
...
printHello()
取消發(fā)布
使用命令npm unpublish <package-name> -f
來取消發(fā)布,這樣的話离钝,你剛才發(fā)布的包就會被撤回曲掰,等于沒有發(fā)布!
[圖片上傳失敗...(image-b61575-1576926092194)]
在新電腦或者新目錄下更新并發(fā)布已有的npm包
如果你換了一臺新電腦奈辰,或者刪除了剛才所創(chuàng)建的npm
包,那么可以在新電腦或者新目錄下乱豆,執(zhí)行
npm install <package-name>
安裝結束后奖恰,你會看到一個node_modules
文件夾,里面有你剛才創(chuàng)建的npm
包宛裕,然后一切都和前面的發(fā)布一樣瑟啃,修改任意你想修改的文件,在有package.json
文件的目錄下揩尸,執(zhí)行npm publish
就可以了蛹屿。但是要記住,每一次發(fā)布npm
包都需要修改版本號岩榆,否則你將發(fā)布失敶砀骸坟瓢!具體修改版本號后面也有常用的配套命令介紹,往下看犹撒,沒興趣的話折联,就到此為止。
關聯(lián)github
有時候我們看到別人發(fā)布到npm
官方倉庫的包识颊,具有如下紅框中的部分诚镰,也就是關聯(lián)到github
,包括Issues
祥款、Pull Requests
等等
為了讓我們的公共倉庫也能關聯(lián)到github
清笨,我們可以在創(chuàng)建npm
包的時候填寫git repository
一欄填寫github
的某個倉庫的https
地址,如下
這里我已經(jīng)提前在
github
上創(chuàng)建了一個langke-npm-demo1
的倉庫了刃跛,所以關聯(lián)地址的時候抠艾,之后復制過去就好了。
一些常用npm命令介紹
- 查看當前登錄的npm用戶
npm whoami
- 查看npm配置
npm config ls
- 查看當前使用的npm鏡像源
npm config get registry
- 切換npm鏡像源
npm config set registry 【這里是鏡像源url】
npm修改版本號
比如要將版本號從1.0.0
修改為2.0.0
奠伪,有2
種方式
一 手動修改
直接修改package.json
文件中的版本號
原來的package.json
內(nèi)容
{
"name": "react-native-demo-for-npm",
"version": "1.0.0",
"description": "this is just a npm demo",
......
}
修改為
{
"name": "react-native-demo-for-npm",
"version": "2.0.0",
"description": "this is just a npm demo",
......
}
二 命令修改
- 1.修改指定版本號
在有package.json
的當前目錄下跌帐,使用
npm version 新版本號
比如
npm version 2.0.0
這樣的話,在發(fā)布之前绊率,就可以將版本號從1.0.0
修改為2.0.0
了谨敛。
- 2.由npm命令生成有序版本號
2.1) 修改主版本號,如果當前版本號是1.0.0
滤否,要修改為2.0.0
脸狸,使用
npm version major
這種方式一般用于包的大幅度改動,如增加了大量了
API
或者發(fā)生其他大量的內(nèi)容修改藐俺。
2.2) 修改次版本號炊甲,比如當前版本號是1.0.0
,要修改為1.1.0
欲芹,使用
npm version minor
這種方式一般用于包的小幅度改動卿啡,比如增加了一些
API
的前后兼容,擴展等等颈娜。
2.3)修改補丁版本號,比如當前版本號是1.0.0
浙宜,要修改為1.0.1
官辽,使用
npm version patch
這種方式一般用于打補丁,也就是一些
bug
修復粟瞬,沒有做其他太大的內(nèi)容變化同仆。
- 查看已發(fā)布的npm包所有版本
npm view react-native-demo-for-npm versions
撤銷已經(jīng)發(fā)布的包
- 一 撤銷整個包
1.1)如果已經(jīng)將npm
包發(fā)布到遠程npm
倉庫,但是又想撤銷發(fā)布
npm unpublish <package-name> -f
比如裙品,已經(jīng)發(fā)布到npm
倉庫的包名叫做react-native-demo
俗批,那么運行
npm unpublish react-native-demo -f
則react-native-demo
就從npm
倉庫上刪除了俗或,你也無法再從npm
倉庫搜索到這個包。
1.2)如果開啟了2FA(two-factor authentication)
扶镀,那么就需要在publish
后面加上--otp=123456
蕴侣,這里的123456
是手機上app(app名稱叫做 Authenticator)
獲取的授權碼
npm unpublish --otp=123456 react-native-demo -f
- 二 撤銷具體的版本
2.1)如果想要撤銷已經(jīng)發(fā)布的具體版本,則可以使用
npm unpublish <package-name>@<version>
比如臭觉,現(xiàn)在有2
個版本昆雀,分別是v1.0.0
、v1.2.0
蝠筑,想要撤銷v1.2.0
狞膘,可以
npm unpublish react-native-demo@1.2.0
2.2)同樣地,如果開啟了2FA(two-factor authentication)
什乙,那么就需要在publish
后面加上--otp=123456
挽封,這里的123456
是手機上app(app名稱叫做 Authenticator)
獲取的授權碼
npm unpublish react-native-demo@1.2.0 --otp=123456
注意:撤銷整個包或具體的版本只有在從開始發(fā)布內(nèi)的
72
小時內(nèi)有效,具體見 官網(wǎng):Unpublishing packages from the registry
下一篇文章將介紹 verdaccio+ngrok發(fā)布npm私有倉庫