使用git bash时,使用base-href构建的Angular-cli也会返回程序文件夹

时间:2017-02-17 08:18:43

标签: angular angular-cli

我正在尝试使用Windows 7 Pro计算机上的MINGW64泊坞箱中的angular-cli构建我的角度项目。

在git bash中,我使用的命令是:

ng build --prod --base-href /appcontext/

我要做的是将属性href="/"的当前基本标记修改为href="/appcontext/"

相反,我得到一个带有href="C:/Program Files/Git/appcontext/"的基本标签。

有人有任何想法吗?

4 个答案:

答案 0 :(得分:7)

迟到的回答,但是我遇到了类似的问题,并且在MINGW中遇到了这个问题(我试图在Windows 10上通过GIT Bash运行带有ng-serve参数的--base-href)。仅通过在Powershell中运行而不是GIT Bash来解决 - base-href参数在那里处理得很好。

答案 1 :(得分:1)

TLDR:将第一个/替换为/

问题:

在Windows上使用git-bash时我也遇到过这个问题。 git-bash查看命令的最后一个参数

ng build --prod --base-href /directory/

作为相对于其二进制文件夹的路径,并在其前面添加参数(它将“似乎是”的相对路径转换为绝对路径)。

官方解决方案(不起作用但可以修复):

我尝试the suggested method在开头使用双斜杠:

ng build --prod --base-href //directory/

这不会被git-bash取代,但是,生成的基本标记有效地使浏览器不仅替换URL的基本路径,而且还替换主机名,这是该字符串的第一部分。因此,如果您在主机hostname上投放应用,则希望该网址为

http://hostname/directory/

但它刚刚成为

http://directory/

您可以通过将主机名硬编码到基本参数中来解决此问题:

ng build --prod --base-href //hostname/directory/

这里的问题是您的构建现在采用固定的主机名。由于我不喜欢这个解决方案,我进行了一些实验,找到了一个不错的选择。

我的解决方案(目前有效但未来版本可能会中断):

我找到了一个聪明的“黑客”:用HTML实体替换第一个斜杠。 CLI工具将该字符串置于href="..."不变,并且不会(双重)转义&符号(它应该,恕我直言)。斜杠符号的可能实体是/,因此您的命令如下所示:

ng build --prod --base-href /directory/

这看起来很奇怪,但有效:

<base href="&#x2f;directory/">

这与

完全“等效”(在HTML / XML意义上)
<base href="/directory/">

请注意,当Angular开发人员决定在CLI工具中“修复”此非转义参数时,此hack可能不再有效,因为这会导致

<base href="&amp;#x2f;directory/">

最终会使您的网址看起来像

http://hostname/&#x2f;directory/

答案 2 :(得分:1)

设置MSYS2_ARG_CONV_EXCL环境变量以禁用路径处理

export MSYS2_ARG_CONV_EXCL=--base-href=

或在命令开头设置它

MSYS2_ARG_CONV_EXCL=--base-href= ng build --base-href="/mypath/"

可以有选择地禁用路径转换。 MSYS2读取一个称为MSYS2_ARG_CONV_EXCL的环境变量。这是一个 ;定界字符串,将其每个部分与每个参数的开头部分进行比较,如果找到匹配项,则跳过该转换。一个MSYS2_ARG_CONV_EXCL的值示例将禁止上述3种情况的路径转换,例如/ switch; / sdcard;-root =。

(来源:https://github.com/msys2/msys2/wiki/Porting

答案 3 :(得分:0)

我在this website上找到了一种适用于Git bash的解决方案:

npm ng build –base-href="//my-path\\" --prod