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

Jer*_*oen 15 msbuild visual-studio npm gulp

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

<Target Name="AfterBuild">
  <Exec Command="gulp" />
</Target>
Run Code Online (Sandbox Code Playgroud)

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

然后,开发人员检查gulpfile.js,并packages.json在我们的VCS.目前:

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

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

 <Exec command="npm install" />
Run Code Online (Sandbox Code Playgroud)

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

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

Kev*_*oid 25

对我有用的方法是将MSBuild增量构建支持与戳记文件结合使用:

<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>
Run Code Online (Sandbox Code Playgroud)

NpmInstall Target当只有运行package.json比新node_modules/.install-stamp和它接触该文件后成功npm install.这种方式npm install只在每次更改后运行一次package.json.


小智 5

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