如何让Azure nodejs webapp重新运行 npm install?

How to make Azure nodejs webapp re-run npm install?

我正在 运行在 Azure 上安装一个节点网络应用程序。 我使用 "local git" 方法部署应用程序。 每次我对源代码进行更改、提交,然后使用 git push azure master 进行部署时,网站上的代码都会按预期更新。

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

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

我明白了(在 https://github.com/projectkudu/kudu/wiki/Deployment) that on deployment "For Node sites, Kudu runs 'npm install' in the wwwroot folder". I'm not sure whether the standard "local git" deployment method invokes the Kudu deployment process. Do I need to create a deployment hook (as described in https://github.com/projectkudu/kudu/wiki/Deployment-hooks)?

安装日志显示: 2017-07-29T07:59:51 更新分支 'master'。 2017-07-29T07:59:52 更新子模块。 2017-07-29T07:59:52 准备部署提交 ID“556a34aab5”。 2017-07-29T07:59:52 运行 自定义部署命令... 2017-07-29T07:59:52 运行 部署命令... 2017-07-29T07:59:52 命令:deploy.cmd 2017-07-29T07:59:53 处理 node.js 部署。 2017-07-29T07:59:53 KuduSync.NET 从:'D:\home\site\repository' 到:'D:\home\site\wwwroot' 2017-07-29T07:59:53 复制文件:'package.json' 2017-07-29T07:59:53 在站点根目录下寻找 app.js/server.js。 2017-07-29T07:59:53 使用启动脚本 server.js 2017-07-29T07:59:55 Node.js 平台上可用的版本有: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 已选择 node.js 版本 8.1.4。使用 package.json 文件选择不同的版本。 2017-07-29T07:59:55 选择npm版本5.0.3 2017-07-29T07:59:56 在 D:\home\site\wwwroot\iisnode.yml 更新 iisnode.yml 2017-07-29T07:59:56 npm WARN lifecycle 用于脚本的节点二进制文件是 D:\Program Files (x86)\nodejs[=36=].10.28\node.exe 但 npm 使用的是 D:\Program文件 (x86)\nodejs.1.4\node.exe 本身。使用 `--scripts-prepend-node-path` 选项来包含执行 npm 的节点二进制文件的路径。 2017-07-29T08:00:03 npm WARN passport-azure-ad-login-oidc@0.0.1 没有存储库字段。 2017-07-29T08:00:03 最新 7.206s 2017-07-29T08:00:03 npm WARN passport-azure-ad-login-oidc@0.0.1 没有许可证字段。 2017-07-29T08:00:03<br> 2017-07-29T08:00:03 成功完成。 2017-07-29T08:00:03 运行 post 部署命令... 2017-07-29T08:00:03 部署成功。

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

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

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