npm官方對(duì)包的命名方式進(jìn)行了一些修改蛾娶,為的是更好的防御「誤植」攻擊盗冷,同時(shí)幫助包開發(fā)者們挑選出更加合適的包名
1荔烧、包名類似,拒絕發(fā)布
把包名中的標(biāo)點(diǎn)符號(hào)去掉并與現(xiàn)有的包進(jìn)行比較刚盈,相同則不允許發(fā)布
例如:react-native已經(jīng)存在羡洛,那么諸如
- reactnative
- react_native
- react.native
的就不可以再發(fā)布了
2、使用作用域
如果因?yàn)槟闫鸬陌c現(xiàn)有的包名太相近而被阻止發(fā)布這個(gè)包藕漱,那么找到一個(gè)獨(dú)一無二包名最簡(jiǎn)單方法就是使用自己的作用域翘县。你可以使用@
+你的npm用戶名
加在包名前面將包劃到你的npm賬戶作用域下。比如谴分,我的npm用戶名是caowen,所以我的作用域是@caowen
镀脂。
所以在package.json文件里把
{
"name": “react-native"
}
修改成
{
"name": “@caowe/react-native"
}
然后我要發(fā)布這個(gè)包牺蹄。被劃了作用域的包默認(rèn)是私有的,所以要通過—access=public
讓它變?yōu)楣械陌?/p>
> npm publish --access=public
+ @caowe/react-native@1.0.0
3薄翅、包命名的歷史
在npm注冊(cè)表上沙兰,包名的歷史是一個(gè)很小心的地添加條件限制的過程。在最早的時(shí)候翘魄,npm允許在包名上添加url安全字符鼎天,包括大寫和小寫字母。但是現(xiàn)在創(chuàng)建的包名中不能再有大寫字母了暑竟,但是在npm注冊(cè)表中那些包名中有大寫字母的包依然存在也依然在使用斋射,包名僅僅在大小寫上的差異讓我們第一次遇到了誤植事件!
可能大多數(shù)人遇到的例子是jsonstream。JSONStream 和 jsonstream 是不同的包但是很難區(qū)分罗岖,在一些大小寫不敏感的系統(tǒng)中安裝這些包就可能有問題
4涧至、好的包名可以幫助到所有人
我們希望新的包名規(guī)則可以幫助包開發(fā)者們挑選出合適的名字,并且能夠幫助用戶去避免意外獲取到錯(cuò)誤的包桑包。