仅在需要时和/或部分

时间:2016-02-16 14:23:18

标签: visual-studio msbuild npm gulp

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

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

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

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

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

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

 <Exec command="npm install" />

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

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

3 个答案:

答案 0 :(得分:18)

对我有用的方法是将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后运行一次。

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

您可以将它添加到您的项目中:

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