對npm的一點點了解


npm 是 JavaScript 世界的包管理工具,並且是 Node.js 平台的默認包管理工具。通過 npm 可以安裝、共享、分發代碼,管理項目依賴關系

npm version的含義

  • 每個npm包都有一個package.json,如果要發布包的話,package.json里面的version字段就是決定發包的版本號
  • version字段結構是有三位的版本號, 如:0.0.1, 對應為major, minor, patch, 也就是說發布大版本的時候會升級為 1.0.0,小版本是0.1.0,一些小修復是0.0.2

那一次完整的npm package發布流程的流程包含哪些步驟

1)  官網注冊用戶 https://www.npmjs.com 進行注冊

2)  在對應的組件庫的路徑下點擊右鍵打開Git Bash

如上圖所示:

執行npm login: 依次按提示輸入對應信息

執行npm publish: 發布npm包

 

如果成功執行上續步驟后就可在npm上看到發布的包了, 就是這么簡單快速,如下圖:

 

不順利的話你可能遇到以下幾種報錯(幾種發布失敗的情況)

1、包名重復錯誤

npm ERR! code E403 npm ERR! 403 Forbidden - PUT http://registry.npmjs.org/koa - You do not have permission to publish "koa". Are you logged in as the correct user? 

如上,發布一個名為koa的包報錯,顯然koa包已存在,切記發布前先去npm上搜一下包名看是否有重復,如果遇到上面提示,修改下包名,再去npm搜一下,確保沒有這個包之后,再發布。

2、npm倉庫鏡像錯誤

npm ERR! code E403 npm ERR! 403 Forbidden - PUT https://registry.npm.taobao.org/pengxiaohua - [no_perms] Private mode enable, only admin can publish this module 

可以看到錯誤提示中https://registry.npm.taobao.org這個是淘寶的倉庫鏡像,而不是npm的倉庫鏡像,需要更換成npm倉庫鏡像。發布前可以先查看本地默認倉庫鏡像,如下:

$ npm config get registry > http://registry.npmjs.org/ 

如果npm config get registry后,返回的http://registry.npmjs.org/, 則說明的對的,如果返回如下:

$ npm config get registry > https://registry.npm.taobao.org/ 

這是淘寶鏡像,說明之前可能是安裝過cnpm,設置了本地的默認倉庫鏡像是淘寶的。需要修改本地倉庫鏡像,如下操作:

$ npm config set registry=http://registry.npmjs.org 

再次執行npm login,然后執行npm publish XXX發布包。

如果發布成功后,則再次將倉庫地址設為淘寶鏡像地址,方便本地cnpm的使用。

$ npm config set registry=https://registry.npm.taobao.org/ 

3 郵箱未驗證

npm ERR! code E403
npm ERR! 403 403 Forbidden - PUT http://registry.npmjs.org/yangfudemo - you must verify your email before publish ing a new package: https://www.npmjs.com/email-edit
npm ERR! 403 In most cases, you or one of your dependencies are requesting

注冊之后要去郵箱驗證,找到郵箱中的郵箱驗證郵件確認

 

上面講的是開源npm包的發布,但一般在公司,基本都是用Nexus3創建私庫來管理內部的插件工具包,這里安利一篇博文講如何用github建立私有npm庫 

 

補充關於package文件npm依賴包踩過的坑

在平常的項目中,仔細看會發現依賴包版本號前面會加上~,或者是^,或者是都不加(截圖如下)

那么~和^的作用和區別是什么呢?

  • ~會匹配最近的小版本依賴包,比如~1.2.3會匹配所有1.2.x版本,但是不包括1.3.0
  • ^會匹配最新的大版本依賴包,比如^1.2.3會匹配所有1.x.x的包,包括1.3.0,但是不包括2.0.0

平時該如何選擇?

什么前綴都沒有: 固然沒問題,但是如果依賴包發布新版本修復了一些小bug,那么需要手動修改package.json文件。

^來標記版本號: 版本更新可能比較大,會造成項目代碼錯誤(當初就是這個動畫庫popmotion: ^8.2.5,項目上線一年用的好好的,突然一天動畫不動了,排除了好久才發現是高的版本語法規則改變了)

~來標記版本號: 這樣可以保證項目不會出現大的問題,也能保證包中的小bug可以得到修復


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM