强制重新安装Node模块

3
我有一个Azure Nodejs网站,链接为http://fitbit-export.azurewebsites.net/。当我从Github部署时,只有当node_modules中的内容与package.json中的不匹配时,Azure才会更新node_modules
这意味着,如果我有一个版本规范,如a@^1.0.0,并且发布了a@1.0.1,除非我更新package.json以请求a@^1.0.1,否则Azure将不会安装a@1.0.1
我猜Azure这样做是因为它可以加快部署速度,但对我来说有点令人惊讶,因为我希望使用"a": "^1.0.0"部署应用程序时,如果a@1.0.1可用,则应该接收到a@1.0.1
我可以通过手动更新package.json中的所有条目来解决此问题。但是,是否有一种方法可以告诉Azure擦除整个node_modules并进行全新的npm install
4个回答

0
问题在于,Azure 自动运行的 npm install 不会更新任何已安装模块的版本,如果 package.json 中指定的版本低于已安装模块的版本,或者至少对于脱字符(^)是这样的情况。
不要每次都删除远程服务器上的整个 node_modules 目录(这将需要很长时间),只需在安装包后更新 .deployment 以运行 npm update
在您要推送到 Azure 的根存储库中运行 azure site deploymentscript --node
这将生成: .deploymentdeploy.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

这将安装您的软件包,然后将它们更新到正确的版本。

通过打开命令提示符并转到带有deploy.cmd的目录,并键入“deploy.cmd”来运行它并检查输出,以确保它已经工作。


0

您可以自定义 Web 应用程序的默认部署脚本。

使用 Azure CLI 获取默认脚本:

azure site deploymentscript --node

deploy.cmd 是部署脚本,在其中您可以看到包恢复命令:

call :ExecuteCmd !NPM_CMD! install --production

您可以在此处自定义命令或执行任何其他步骤。

为了使用自定义脚本,请将deploy.cmd和生成的.deployment文件一起检入您的源代码控制,以便它随代码一起部署。


0

-1

这与devDependencies无关。 - Nick Heiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接