仅在需要和/或部分时运行npm install

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了仅在需要和/或部分时运行npm install相关的知识,希望对你有一定的参考价值。

我们从我们的csproj文件中调用Gulp,因为我们在此项目中使用Visual Studio 2013:

<Target Name="AfterBuild">
  <Exec Command="gulp" />
</Target>

但是,由于我们仍在制作这个新项目,我们经常将gulpfile.js扩展到包括新的包。开发人员会做例如npm install gulp-util --save-dev并写了一个新任务,一切都很顺利。

然后开发人员检查gulpfile.jspackages.json到我们的VCS。目前:

  • Teamcity有一个额外的构建步骤npm install;
  • 每个开发人员都必须手动运行npm install;

必须记住必须手动完成的事情并不是一个很好的选择。有一次,我们在csproj内的Task文件中有这个...

 <Exec command="npm install" />

......就在gulp执行官之前,所以开发人员不能“忘记”采取这个手动步骤。但是,每次(重新)构建可能需要一个甚至几秒钟,这很烦人。

有没有更好的方法来解决这个问题?在使用Visual Studio开发大型(ish)团队的项目中,如何处理packages.json的更新?

答案

对我有用的方法是将MSBuild incremental build support与图章文件结合使用:

<PropertyGroup>
  <!-- File with mtime of last successful npm install -->
  <NpmInstallStampFile>node_modules/.install-stamp</NpmInstallStampFile>
</PropertyGroup>
<Target Name="NpmInstall"
  BeforeTargets="BeforeBuild"
  Inputs="package.json"
  Outputs="$(NpmInstallStampFile)">
  <Exec Command="npm install" />
  <Touch Files="$(NpmInstallStampFile)" AlwaysCreate="true" />
</Target>

NpmInstall Target仅在package.jsonnode_modules/.install-stamp更新时运行,并且在成功的npm install之后触及该文件。这样,npm install只在每次更换为package.json后运行一次。

另一答案

不幸的是,没有办法只在npm中安装新软件包,但你可以尝试使用npm-fast-installnpm_lazy等工具减少在此步骤中花费的时间。

另一答案

npm-install-missing结合npm outdatednpm install来安装依赖树中所有缺少的依赖项。

您可以将它添加到您的项目中,如下所示:

<Target Name="AfterBuild">
  <Exec command="npm-install-missing" />
  <Exec Command="gulp" />
</Target>

以上是关于仅在需要和/或部分时运行npm install的主要内容,如果未能解决你的问题,请参考以下文章

在 Jenkins 中:如何运行 NPM install 、 npm run 和 Npm run 代理

ENOENT:运行 npm install 命令时没有这样的文件或目录

Github 操作:npm install -> 错误:进程已完成,退出代码为 1

当我运行`npm install`时,它返回`ERR!代码 EINTEGRITY` (npm 5.3.0)

运行 npm install cordova 时 npm install 不起作用

[为什么在macOS Catalina上为Angular项目运行npm install时出现这些故障?