簡體   English   中英

如何使用 Firebase Cloud Functions.npmrc 設置私有 NPM 模塊?

[英]How To Setup Private NPM Module With Firebase Cloud Functions .npmrc?

我創建了一個私有類型 npm 模塊,用於我的 firebase 函數和應用程序項目。 當我去部署 firebase 函數時,每個 function 都會出現一個大錯誤,基本上是ERR: remote. Invalid username or password. ERR: remote. Invalid username or password.

對於我所閱讀的內容,看起來我需要創建一個 .npmrc 文件並將其放在 /functions 目錄中。 ( https://cloud.google.com/functions/docs/writing/specifying-dependencies-nodejs#using_private_modules )

但是,我無法在任何地方找到有關如何執行此操作的正確說明。 根據我的發現,我做了以下事情:

  • 運行 npm 登錄
  • 跑了 npm token create --read-only

然后這給了我一個看起來像這樣的令牌: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

然后,我在我的函數目錄中創建了一個名為 .npmrc 的文件,並將//registry.npmjs.org/:_authToken=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX放入其中。

此外,我看到錯誤消息是嘗試使用 ssh 來安裝我的私人倉庫 package,我沒有設置 ssh 而是使用 https,因此我將我的 package 文件更改為git+https://github.com/accounts-name/repo#commit-num以便它使用 HTTPS。

但是,我仍然收到相同的錯誤消息。 我錯過了什么? 以上是我從大量谷歌搜索中串起來的。

看來您在嘗試使其工作時進行了太多不同的更改,所以讓我們逐步完成整個過程 go。

  1. 查看你的npm模塊的package.json並發布:

    • 刪除“私有”屬性或將其設置為false ,因為 npm 中的私有模塊永遠不會發布。 這並不明顯,但確實如此。
    • 下一步是對 package 應用限制訪問。為此,請在package.json文件中添加此類屬性
     "publishConfig": { "access": "restricted" },
    • 請確保您用於發布的npm帳戶支持私有包。
    • 現在打開 package 根目錄中的終端,鍵入npm login ,然后登錄 npm。檢查您是否將正確的版本放入package.json
    • 運行npm publish package 應該會在幾秒鍾內發布。 不用擔心,由於publishConfig屬性,沒有人可以訪問它。
  2. 現在是時候允許在您的項目中安裝 package

    • Go 到工程目錄下,打開package.json文件
    • 檢查dependencies項列表中是否包含 package 的名稱和版本
    • 打開瀏覽器,導航至https://npmjs.com ,登錄您的帳戶,導航至您帳戶的設置頁面並打開tokens選項卡
    • 創建新令牌並復制它
    • 現在再次 go 到您的項目目錄,與package.json文件所在的同一級別(這很重要!)並在那里創建.npmrc文件。
    • 將這樣的字符串放在.npmrc文件中:
     //registry.npmjs.org/:_authToken=TOKEN_HERE

    你完成了!

  3. 使用遠程 CI/CD 服務進行部署

    • 最簡單的方法是不將.npmrc添加到.gitignore中。 在這種情況下,文件將始終在存儲庫中,因此npm install將在克隆項目的任何機器上順利運行
    • 如果你不想在存儲庫中有令牌字符串,你可以將它移動到你的 CI/CD 服務的環境變量,然后將 link.npmrc 文件移動到該變量。 例如,您可以將生成的令牌放入NPM_TOKEN env 變量(只是來自 npmjs 的令牌,而不是來自 .npmrc 的整個字符串!)然后按以下方式更改.npmrc文件://registry.npmjs.org/: //registry.npmjs.org/:_authToken=${NPM_TOKEN}

因此,通過這些步驟,您應該能夠毫無問題地安裝受限軟件包。 祝你好運!

如果您嘗試使用 firebase 從 CI 部署您的功能,您的.npmrc文件如下所示。

@acmecorp:registry=https://npm.pkg.github.com/

//npm.pkg.github.com/:_authToken=${NPM_REGISTRY_TOKEN}

即使您設置了環境變量,您也會遇到問題。

Build failed: Error: Failed to replace env in config: ${NPM_REGISTRY_TOKEN}

Firebase 出於某種原因需要訪問該私人倉庫。 但是環境變量沒有發送到 firebase。

我實施的解決方案是在 CI 管道的每次運行中替換 .npmrc 文件中的${NPM_REGISTRY_TOKEN}

sed -i.bak "s/\${NPM_REGISTRY_TOKEN}/${NPM_REGISTRY_TOKEN}/g" .npmrc

如果您使用 Yarn ,這會中斷。 我花了一段時間才在 firebase cli 預部署步驟中找到指向 npm 安裝的線程。 如果沒有 package-lock.json 並且你只使用紗線,這將會中斷。 刪除 yarn.lock 並使用 npm 安裝以解決問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM