簡體   English   中英

從Azure網站上的文件系統安裝Node.js模塊

[英]Installing Node.js modules from file system on Azure Websites

我有一個作為Azure網站運行並使用Gi​​t進行部署的Node.js應用。 該應用程序需要一個私有的模塊(即,由我編寫,與其他任何人都不相關,因此在NPM中不可用),並且與我的其他項目共有。 假設該模塊位於./lib/mymodule並且在package.json文件中具有自己的依賴項。 問題是我無法弄清楚如何讓Azure安裝我自己的模塊的依賴項。 我想避免不得不在版本控制下添加我的node_modules目錄(當前為.gitignor ),或者不必將模塊的依賴項添加為我的應用程序的依賴項(這很丑陋,並且有點不方便)。

在我的本地開發環境中進行此工作很簡單。 我所做的第一件事就是按照https://docs.npmjs.com/files/package.json中的說明 ,將我自己的模塊作為本地依賴項包含在package.json中(請參見“本地路徑”一節)。 一個簡單的npm install現在可以輕松便捷地安裝我自己的模塊。 因為我知道Azure每次部署新版本時都會運行npm install ,所以我認為這就是我所需要的。 原來我錯了: package.json dependencies部分中的本地路徑僅在NPM 2.0.0中引入,而Azure正在運行NPM 1.4.x,因此部署顯然失敗了。 好的,那么我可以在Azure中運行其他版本的NPM嗎? 從理論上講,是的,但是實踐似乎是另外一回事。 我嘗試了https://github.com/glennblock/azure-node-runtime-selector,但無濟於事。 以下是一些部署輸出:

remote: Handling node.js deployment.
remote: KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot'
remote: ............
remote: node version: 0.11.14
remote: ..............
remote: 2.1.18
remote: npm version: 1.4.6
remote: An error has occured during web site deployment.
remote: npm failed
remote:
remote: Error - Changes committed to remote repository but deployment to website failed.

顯然,它無法安裝任何NPM版本> = 2.0.0。

好的,那還不錯,我想。 我可以使用舊版本的NPM,我只需要運行另一個npm install來安裝我自己的模塊,如NPM文檔所提示。 因此,我從package.json npm install ./lib/mymodule了本地依賴項,只需運行npm install ./lib/mymodule 很好,很容易...在我的本地。 我挖掘了有關如何在Azure中的部署上運行自定義命令的說明:只需運行azure site deploymentscript --node並編輯它創建的deploy.sh 只是為了確保自定義部署腳本可以正常工作,我進行了一個部署,而沒有進行任何編輯。 好的 然后我在deploy.sh添加了一行(在第111行附近):

# 3. Install npm packages
if [ -e "$DEPLOYMENT_TARGET/package.json" ]; then
  cd "$DEPLOYMENT_TARGET"
  eval $NPM_CMD install --production
  eval $NPM_CMD install ./lib/mymodule #This line added by me
  exitWithMessageOnError "npm failed"
  cd - > /dev/null
fi

不。 這是我得到的:

remote: Installing npm packages...
remote: npm ERR! addLocal Could not install ./lib/mymodule
remote: An error has occurred during web site deployment.
remote: npm ERR! Error: ENOENT, stat 'd:\home\site\wwwroot\lib\mymodule'
remote: npm failed
...snip...
remote:
remote: npm ERR! System Windows_NT 6.2.9200
remote: npm ERR! command "d:\\Program Files (x86)\\nodejs\\0.10.28\\node.exe" "D:\\Program Files(x86)\\npm\\1.4.9\\node_modules\\npm\\bin\\npm-cli.js" "install" "./lib/mymodule"
remote: npm ERR! cwd d:\home\site\wwwroot
remote: npm ERR! node -v v0.10.28
remote: npm ERR! npm -v 1.4.9
remote: npm ERR! path d:\home\site\wwwroot\lib\mymodule
remote: npm ERR! code ENOENT
remote: npm ERR! errno 34
remote: npm
remote:
remote: Error - Changes committed to remote repository but deployment to website failed.

這就是我卡住的地方。 我嘗試繞過這條路,猜測Windows正在以某種方式對其進行處理,但尚未找到可行的解決方案。 奇怪的是, ./lib/mymodule似乎下定決心, d:\\home\\site\\wwwroot\\lib\\mymodule這蠻好看的我,確實存在,至少在部署后,當我在FTP'd拿看。

在NPM 2.xx正常工作或進行自定義部署方面,我將不勝感激。 也許還有其他方法可以管理我從未想到的本地模塊? 如果所有其他方法都失敗了,也許我只是提交我的node_modules或手動管理我的依賴項。 我已經花了太多時間來解決最初看起來很瑣碎的問題。 :)

Azure WebSites團隊將在本月底(15年1月)開箱即用地提供對npm 2.1.17的支持。 希望這可以幫助您解除封鎖。

暫無
暫無

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

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