0

我正在处理一个相当大的 JavaScript 项目,嵌入到 ASP.NET MVC 项目中。我已将 JS 代码分成几个(12-ish)文件,以便更轻松地处理代码。问题是,我失去了智能感知,而且,我需要链接页面上的几个文件。想法出现了:让我们制作一个 PS 脚本,将文件连接成一个文件。它工作得很好,我只引用那个文件,所以我有 IntelliSense,而且,我只需要将那个文件链接到页面中。但是,我需要在每次构建时手动运行脚本。所以下一个想法是设置一个预构建事件来运行脚本。问题来了,脚本没有成功运行。

这是脚本:

if(Test-Path myprefix-concatenated.js){
Remove-Item myprefix-concatenated.js
}
cat myprefix-*.js > concatenated.js
Rename-Item -path concatenated.js -newname myprefix-concatenated.js

这是预构建事件:

powershell.exe -file "$(ProjectDir)\Scripts\my-scripts\concat.ps1"

这是构建的输出:

3>  Get-Content : An object at the specified path myprefix-* does not exist, or has been
3>  filtered by the -Include or -Exclude parameter.
3>  At ...\Scripts\my-scripts\concat.ps1:4 char:4
3>  + cat <<<<  myprefix-* > concatenated.js
3>      + CategoryInfo    : ObjectNotFound: (System.String[]:String[]) [Get-
3>     Content], Exception
3>      + FullyQualifiedErrorId : ItemNotFound,Microsoft.PowerShell.Commands.GetCo
3>     ntentCommand

在此之后,构建成功,但连接不会发生。如果我手动运行脚本,它可以工作。您知道导致此问题的原因以及如何解决吗?提前致谢!

4

1 回答 1

1

我不会假设当前目录的设置与您期望的一样。您正在使用相对路径,这可能不是一个好主意。您可以将路径作为参数传递给脚本,例如

powershell.exe -file "$(ProjectDir)\Scripts\my-scripts\concat.ps1" "$(ProjectDir)"

-- concat.ps1 --
param($projectDir)

if (Test-Path $projectDir\Scripts\my-scripts\myprefix-concatenated.js) {
    Remove-Item $projectDir\Scripts\my-scripts\myprefix-concatenated.js
}
cat $projectDir\Scripts\my-scripts\myprefix-*.js > $projectDir\Scripts\my-scripts\concatenated.js
Rename-Item $projectDir\Scripts\my-scripts\concatenated.js -newname $projectDir\Scripts\my-scripts\myprefix-concatenated.js

如果您使用的是 PowerShell v3,则可以使用 $PSScriptRoot 自动变量引用相对于 concat.ps1 脚本所在位置的文件,例如:

if (Test-Path $PSScriptRoot\myprefix-concatenated.js) {
    Remove-Item $PSScriptRoot\myprefix-concatenated.js
}
cat $PSScriptRoot\myprefix-*.js > $PSScriptRoot\concatenated.js
Rename-Item $PSScriptRoot\concatenated.js -newname $PSScriptRoot\myprefix-concatenated.js
于 2013-08-22T03:05:53.327 回答