我有一个有角度的网站,它使用grunt来改变一些环境配置设置。
我想要的是web.config中控制这些gruant变量的应用程序设置。这样,无论何时推广到不同的环境,我都可以使用web.config转换。
这是正确的做法吗?如果是这样,我将如何实现?如果没有,什么是更好的解决方案?
答案 0 :(得分:0)
我使用Gulp,但同样的逻辑将适用。
首先,使用Web Config Transforms确实不是正确的方法,如果不编写VS扩展,我甚至不能确定你能做到这一点。
Grunt确实有一个环境变量插件(https://github.com/jsoverson/grunt-env),它允许您访问Node环境变量。
通过这种方式,您可以在grunt文件中放置一个对象,该对象包含保存每个状态值的子对象,例如
var settings = {
development: [
{ searchApi: 'http://dev.mysite' },
{ title: 'MySite (DEV)' }
],
qa: [
{ searchApi: 'http://qa.mysite' },
{ title: 'MySite (QA)' }
],
live: [
{searchApi: 'https://www.mysite' },
{ title: 'MySite' }
]};
然后执行相关状态数组的循环,并搜索并替换。
然后,您可以在grunt文件运行时手动切换值,或者您可以与MSBuild搏斗并根据当前配置设置变量。 IIRC,Grunt是同步的,所以它应该与MSBuild很好地配合。
修改强>
在使用Gulp / Grunt和MSBuild独自离开一段时间之后,我回过头来找出解决方案。
首先,您需要一个.bat文件,其中包含以下代码(对于Gulp):
set NODE_ENV=%1
gulp --gulpfile gulpfile.js
接下来,打开您的解决方案属性,并在预构建中添加:
CD $(ProjectDir)
CALL deploy.bat $(ConfigurationName)
这将调用.bat文件,将当前配置作为参数传入,然后设置NODE_ENV值并运行gulp。
AFAICT,您必须批量执行此操作,因为顺序命令调用似乎在MSBuild的不同上下文中运行,因此您将丢失NODE_ENV值。
我怀疑你可以使用类似的方法让MSBuild运行npm和bower,但那是另一天的实验!