在postbuild事件中编辑js文件

时间:2017-02-24 17:13:52

标签: visual-studio powershell post-build-event

我已根据ConfigurationName为我复制文件设置了后期构建事件,并且希望能够在角度应用程序的客户端上的config(js)文件中设置“环境变量”以允许调试信息可见或不依赖于环境运行应用程序。

为此,我创建了一个powershell脚本(ReplaceText.ps1):

function replace-file-content([String] $path, [String] $replace, [String] $replaceWith)
{
(Get-Content $path) | Foreach-Object {$_ -replace $replace,$replaceWith} | Out-File $path
}

并将此行添加到我的Web项目的post build事件中。

if "$(ConfigurationName)"=="LIVE" (powershell -File "$(ProjectDir)Tools\ReplaceText.ps1" "$(ProjectDir)app\application.config.js" "DEBUG" "LIVE")

我希望在我的application.config.js文件中针对LIVE构建配置构建时将“DEBUG”更改为“LIVE”,该文件包含以下行:

$provide.constant('currentEnv', 'DEBUG');

构建成功但我的文件没有发生任何变化。任何人都可以确定我哪里出错了吗?

我知道我可以用Gulp或其他任务运行员BTW做这种事情,但是试图在没有引入另一个依赖项的情况下这样做,只使用VS post build事件& PS。 :)

干杯

1 个答案:

答案 0 :(得分:1)

你的PS代码只定义了一个函数,但没有任何函数可以调用它。

使用param作为脚本中的第一个语句,将命令行转换为脚本的参数:

param([String] $path, [String] $replace, [String] $replaceWith)

(Get-Content -literalPath $path -raw) -replace $replace, $replaceWith |
    Out-File $path -encoding UTF8
  • -literalPath - 正确处理带有[]符号的路径,否则将其解释为通配符;
  • -raw - 将整个文件作为一个加速字符串读取,自PowerShell 3起可用。