【轉】根據條件配置多個npm倉庫


npm 很早就支持了 scope 功能,當前很多流行的庫采用這種形式發布,如 babel:

{
  "devDependencies": {
    "@babel/core": "^7.0.0",
    "@babel/plugin-proposal-class-properties": "^7.0.0",
    "@babel/plugin-proposal-object-rest-spread": "^7.0.0",
    "@babel/plugin-transform-runtime": "^7.0.0",
    "@babel/preset-env": "^7.0.0",
    "@babel/preset-react": "^7.0.0"
  }
}

scope 是一種很好的包管理方式。統一的“命名空間”,清晰、好辨識;在 registry 中使用統一的 organization 管理,不必擔心命名沖突和冒用等。 

在實際使用中,一個常見的場景是公司的私有倉庫。使用統一的 scope 定義在私有倉庫中定義私有包,絕對是一個非常好的方式。

指定 scope 從指定倉庫安裝

例如你所在公司的私有包全部使用 @xyz 這個 scope,倉庫地址是 http://rnpm.xyz.com/。在實際的項目開發中,常常是即使用內部的私有包,也使用外部的開源包。最簡單的區分方式就是定義 .npmrc :

@xyz:registry=http://rnpm.xyz.com/

可以定義在項目根目錄,也可以定義在 $HOME 目錄,僅僅是作用范圍的區別。.npmrc 創建完成后,執行 npm install 時,scope 是 @xyz 的包都會從指定的倉庫下載。

發布 scoped package

安裝的問題其實很好處理的,即使不用上面提到的方案,直接定義 alias 也是可以的,如 cnpm 官方的文檔提到的:

alias cnpm="npm --registry=https://registry.npm.taobao.org \--cache=$HOME/.npm/.cache/cnpm \--disturl=https://npm.taobao.org/dist \--userconfig=$HOME/.cnpmrc"

類似的你可以定義一個叫 xyznpm 的 alias,指向到 http://rnpm.xyz.com/ ,之后全部使用 xyznpm 代替 npm 即可。

大部分場景下這樣也很好,但是如果遇到類似 lerna 這樣基於 npm 的工具,就十分麻煩了。所以這里介紹另一種方式,npm 原生支持的多用戶登錄

npm login --registry=http://rnpm.xyz.com/ --scope=@xyz

登錄完成之后,執行 npm config ls 就可看到具體的 npm 設置:

 

可以看到我設置了三個 scope,之后這三個 scope 下包在執行 npm install 和 npm publish 的時候,都會指向我配置的倉庫。


免責聲明!

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



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