在Azure Web App上使用私有的npm registry

Reading time ~2 minutes

Azure Web App是一個還算簡單好用的PAAS, 它是基於一個open source project - Kudu, 因此除了C#外, 也支援了Java, PHP, Node.js, Python等環境, 部屬的方法也簡單到只需要用”git push”就可以了

使用node.js來開發程式的話, 免不了需要安裝許多不同的模組(module), 這對Web App來說也不是問題, 在”git push”之後, 它自動就會用”npm install”來幫你安裝package.json裡面指定的所有模組

但有時候, 用到的模組未必是放在公開的npm registry而是放在私有的registry, 那這時候就得做一點手腳了

首先在專案目錄中, 新增一個.npmrc的檔案(https://docs.npmjs.com/files/npmrc), 把private registry相關資訊(url, auth)放在這檔案, 並push上去

這時候你會看到push過程中, 雖然有找到private registry, 但會有一個錯誤產生:

Error: can’t access restricted package without auth, did you forget ‘npm set always-auth true’?

原因是你必須要先跑過”npm set always-auth true”, 不然在連接私有的registry會因為沒有認證而出錯, 那要怎樣在事前跑這指令呢? 這時候就要借助deployment script了

azure site deploymentscript –node

在你的專案目錄下跑以上那指令, 在你目錄下就會產生兩個檔案: .deployment和deploy.sh, 在deploy.sh找到下面這段:

# 3. Install npm packages

在這行下面加上:

eval $NPM_CMD set always-auth true

再把這些給push到Azure Web App上, 大功告成!