我正在开发一个前端程序包,这是我的环境:
我的问题是我试图避免在我的构建服务器上全局安装节点和Gulp(主要是因为我不想打扰这个 - 安装,更新,同步等)。
所以我找到了一个NuGet包(https://www.nuget.org/packages/Npm.js/),它允许我在没有在计算机上安装节点的情况下恢复所有包。但问题是我安装的本地Gulp假设它旁边有一个node.exe或机器的路径:
@IF EXIST "%~dp0\node.exe" (
"%~dp0\node.exe" "%~dp0\..\gulp\bin\gulp.js" %*
) ELSE (
@SETLOCAL
@SET PATHEXT=%PATHEXT:;.JS;=;%
node "%~dp0\..\gulp\bin\gulp.js" %*
)
现在显然这不起作用,因为我没有在构建机器上安装节点,并且node_modules中没有本地节点安装。
那么有没有办法避免在每个构建服务器上全局安装我的构建工具?或者Node和Gulp打算安装在哪里?应该如何保持更新?它不像每隔几个月发布一次的Visual Studio版本......或者您是否只是忽略了构建工具的频繁发布?
我还可以将NuGet包添加到路径中,但是(node.exe所在的路径)取决于NuGet包的版本,并且每次更新时都需要更多维护。所以我不喜欢这样......
答案 0 :(得分:0)
这不是最优的,但这是我最终做的事情:我使用NuGet package在MSBuild中设置环境变量并创建了以下构建配置:
<Target Name="GulpBuild">
<SetEnvVariable Name="path" Value="%path%;..\packages\Node.js.5.3.0" />
<Exec Command="node_modules/.bin/gulp" />
</Target>
现在,当我在VS(CTRL + Shift + B)中构建解决方案时,它将节点位置添加到路径,然后调用gulp。当然我想我可以自己编写gulp命令,包括节点路径。 在任何情况下,这当然不是最佳的,因为如果我更新Node.js版本,我需要手动更新位置,但我找不到更好的解决方案。
至少路径配置是在存储库内定义的,不依赖于任何机器配置。
答案 1 :(得分:0)
这里很晚,但我认为你可以设置你的gulp项目来运行安装到node_modules的gulp。例如,在npm start
上,您可以使用二进制路径。
简而言之,您是否可以将项目更改为不使用全局gulp?它可能是看起来工作的工作。