Visual Studio web.config转换和grunt

时间:2016-08-18 14:09:59

标签: angularjs visual-studio gruntjs

我有一个有角度的网站,它使用grunt来改变一些环境配置设置。

我想要的是web.config中控制这些gruant变量的应用程序设置。这样,无论何时推广到不同的环境,我都可以使用web.config转换。

这是正确的做法吗?如果是这样,我将如何实现?如果没有,什么是更好的解决方案?

1 个答案:

答案 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,但那是另一天的实验!