我在http://fitbit-export.azurewebsites.net/有一个Azure Nodejs网站。当我从Github进行部署时,如果node_modules
中已存在的内容与node_modules
中的内容不匹配,则Azure只会更新package.json
。
这意味着,如果我发布了a@^1.0.0
等版本规范并发布了a@1.0.1
,则除非我更新a@1.0.1
以请求{{{}},否则Azure不会安装package.json
1}}。
我猜Azure是这样做的,因为它使部署更快,但对我来说有点令人惊讶,因为我希望部署一个a@^1.0.1
的应用程序来接收"a": "^1.0.0"
(如果可用)。
我可以通过手动更新a@1.0.1
中的所有条目来解决此问题。但是,有没有办法告诉Azure擦除我的整个package.json
并重新node_modules
?
答案 0 :(得分:0)
您可以自定义Web Apps的默认部署脚本。
要获取默认脚本,请使用azure-cli
azure site deploymentscript --node
deploy.cmd
是部署脚本,您可以在其中看到程序包恢复命令:
call :ExecuteCmd !NPM_CMD! install --production
您可以在此处自定义命令或执行任何其他步骤。
要使用自定义脚本,请在源代码管理中检查deploy.cmd
以及生成的.deployment
文件,以便将其与代码一起部署。
答案 1 :(得分:0)
正如@itaysk所说,您可以尝试为您的webapp自定义部署脚本。
作为参考,我认为有一些有价值且有用的文件。
答案 2 :(得分:0)
问题是,如果package.json中指定的版本低于安装的模块,或者至少是插入符号的情况,则azure自动运行的npm install
不会更新任何现有模块(^)
每次(很长一段时间)删除远程服务器上的整个node_modules,而不是在安装软件包后更新.deployment
以运行npm update
。
在你想要推出azure的根存储库中运行azure site deploymentscript --node
。
这会产生:
.deployment
和deploy.cmd
我们只关心`.deployment。
更新.deployment
脚本以添加以下行:
:: 4. Update npm packages
call :ExecuteCmd !NPM_CMD! update
IF !ERRORLEVEL! NEQ 0 goto error
到部署部分:
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
:: Deployment
:: ----------
:Deployment
echo Handling node.js deployment.
:: 1. KuduSync
IF /I "%IN_PLACE_DEPLOYMENT%" NEQ "1" (
call :ExecuteCmd "%KUDU_SYNC_CMD%" -v 50 -f "%DEPLOYMENT_SOURCE%" -t "%DEPLOYMENT_TARGET%" -n "%NEXT_MANIFEST_PATH%" -p "%PREVIOUS_MANIFEST_PATH%" -i ".git;.hg;.deployment;deploy.cmd"
IF !ERRORLEVEL! NEQ 0 goto error
)
:: 2. Select node version
call :SelectNodeVersion
IF EXIST "%DEPLOYMENT_TARGET%\package.json" (
:: 3. Install npm packages
pushd "%DEPLOYMENT_TARGET%"
call :ExecuteCmd !NPM_CMD! install --production
IF !ERRORLEVEL! NEQ 0 goto error
:: 4. Update npm packages
call :ExecuteCmd !NPM_CMD! update
IF !ERRORLEVEL! NEQ 0 goto error
popd
)
::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
goto end
这会安装您的软件包,然后将它们更新为正确的版本。
通过打开cmd并使用deploy.cmd
转到目录并键入“deploy.cmd”来运行它并检查输出来检查它是否正常工作。
答案 3 :(得分:-1)
我相信你看到的是因为Azure Web App automates the deployment using npm install --production所以它没有安装devDependencies。你能否将devDependencies重命名为package.json中的依赖项?