node.js - 如何使Azure nodejs webapp重新运行npm install?

标签 node.js azure deployment azure-web-app-service npm-install

我正在 Azure 上运行 Node Web 应用程序。 我使用“本地 git”方法部署应用程序。 每次我对源代码进行更改时,提交,然后使用 git push azure master 进行部署,网站上的代码已按预期更新。

但我最近的更改之一包括向我的 package.json 添加一个新包文件。现在,当我部署时,我的文件已更新,但 azure 似乎没有重新运行 npm install ,并且未安装新模块。这意味着应用程序不会启动:当我的代码调用 require('missingModuleName') 时它遇到 fatal error 并停止。

上次遇到此问题时,我从 Azure 中删除了该应用程序,然后从头开始创建了一个新应用程序。但我希望有一个更简单的解决方案。

我看到(在 https://github.com/projectkudu/kudu/wiki/Deployment )部署时“对于 Node 站点,Kudu 在 wwwroot 文件夹中运行‘npm install’”。我不确定标准的“本地 git”部署方法是否调用 Kudu 部署过程。我是否需要创建部署 Hook (如 https://github.com/projectkudu/kudu/wiki/Deployment-hooks 中所述)?

安装日志显示: 2017-07-29T07:59:51 Updating branch 'master'. 2017-07-29T07:59:52 Updating submodules. 2017-07-29T07:59:52 Preparing deployment for commit id '556a34aab5'. 2017-07-29T07:59:52 Running custom deployment command... 2017-07-29T07:59:52 Running deployment command... 2017-07-29T07:59:52 Command: deploy.cmd 2017-07-29T07:59:53 Handling node.js deployment. 2017-07-29T07:59:53 KuduSync.NET from: 'D:\home\site\repository' to: 'D:\home\site\wwwroot' 2017-07-29T07:59:53 Copying file: 'package.json' 2017-07-29T07:59:53 Looking for app.js/server.js under site root. 2017-07-29T07:59:53 Using start-up script server.js 2017-07-29T07:59:55 Node.js versions available on the platform are: 0.6.20, 0.8.2, 0.8.19, 0.8.26, 0.8.27, 0.8.28, 0.10.5, 0.10.18, 0.10.21, 0.10.24, 0.10.26, 0.10.28, 0.10.29, 0.10.31, 0.10.32, 0.10.40, 0.12.0, 0.12.2, 0.12.3, 0.12.6, 4.0.0, 4.1.0, 4.1.2, 4.2.1, 4.2.2, 4.2.3, 4.2.4, 4.3.0, 4.3.2, 4.4.0, 4.4.1, 4.4.6, 4.4.7, 4.5.0, 4.6.0, 4.6.1, 4.8.4, 5.0.0, 5.1.1, 5.3.0, 5.4.0, 5.5.0, 5.6.0, 5.7.0, 5.7.1, 5.8.0, 5.9.1, 6.0.0, 6.1.0, 6.2.2, 6.3.0, 6.5.0, 6.6.0, 6.7.0, 6.9.0, 6.9.1, 6.9.2, 6.9.4, 6.9.5, 6.10.0, 6.11.1, 7.0.0, 7.1.0, 7.2.0, 7.3.0, 7.4.0, 7.5.0, 7.6.0, 7.7.4, 7.10.0, 7.10.1, 8.0.0, 8.1.4. 2017-07-29T07:59:55 Selected node.js version 8.1.4. Use package.json file to choose a different version. 2017-07-29T07:59:55 Selected npm version 5.0.3 2017-07-29T07:59:56 Updating iisnode.yml at D:\home\site\wwwroot\iisnode.yml 2017-07-29T07:59:56 npm WARN lifecycle The node binary used for scripts is D:\Program Files (x86)\nodejs\0.10.28\node.exe but npm is using D:\Program Files (x86)\nodejs\8.1.4\node.exe itself. Use the `--scripts-prepend-node-path` option to include the path for the node binary npm was executed with. 2017-07-29T08:00:03 npm WARN <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="88f8e9fbfbf8e7fafca5e9f2fdfaeda5e9eca5e4e7efe1e6a5e7e1ecebc8b8a6b8a6b9" rel="noreferrer noopener nofollow">[email protected]</a> No repository field. 2017-07-29T08:00:03 up to date in 7.206s 2017-07-29T08:00:03 npm WARN <a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="4e3e2f3d3d3e213c3a632f343b3c2b632f2a6322212927206321272a2d0e7e607e607f" rel="noreferrer noopener nofollow">[email protected]</a> No license field. 2017-07-29T08:00:03<br/> 2017-07-29T08:00:03 Finished successfully. 2017-07-29T08:00:03 Running post deployment command(s)... 2017-07-29T08:00:03 Deployment successful.

最佳答案

问题出在 package-lock.json 上。我在本地使用旧的 npm 版本 3,它没有创建包锁定文件(而且我还没有准备好收缩包装)。

但是 Azure 上较新的 npm 版本 5确实创建了 package-lock.json。这似乎优先于 package.json

所以我在本地升级了npm(花了一段时间才发现我需要nodist npmlatest来做到这一点),并将package-lock.json添加到我的git中 repo 。然后,当它部署时,npm 花了相当长的时间,但它为我安装了所有东西。

关于node.js - 如何使Azure nodejs webapp重新运行npm install?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45386876/

相关文章:

javascript - npm 从 package-lock.json 文件中创建一个 package.json 文件?

node.js - 在 Bluebird 中传递变量的正确方法是什么?

ios - iOS 上的 Node.JS 开发?

azure - 如何使用 Azure CLI 将 Azure 容器实例部署到 VNET

azure - 如何使用我的 AAD 凭据登录到我的 Azure VM?

ubuntu-12.04 - Ubuntu 12.04 ruby​​ 包安装错误

python - 如何在 Heroku 上正确安装 PyICU?

javascript - 使用带有 Node.js 的 REST api 服务器连接到我的 sql 数据库时出现问题

azure - 如何在 Windows Azure 上启用 CDN

java - 在国际范围内部署 Android 应用程序