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



我正在尝试在Windows 7 Pro机器上的MINGW64 docker框中使用angular-cli构建我的角度项目。

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

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

我正在尝试做的是使用属性href="/"修改我当前的基本标签以href="/appcontext/"

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

有人知道吗?

回答晚了,但我遇到了类似的问题,并且在 MINGW 中发生了这个问题(我试图在 Windows 10 上通过 GIT Bash 使用--base-href参数运行ng-serve)。只需在Powershell中运行而不是GIT Bash即可解决 - base-href参数在那里处理得很好。

TLDR:将第一个/替换为/


问题:

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

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

作为相对于其二进制文件夹的路径,并在参数前面加上该路径(它将"看起来"的相对路径转换为绝对路径)。

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

我尝试了在开头使用双斜杠的建议方法:

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

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

http://hostname/directory/

但它只是变成了

http://directory/

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

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 工具中"修复"这个非转义参数时,此黑客可能不再有效,因为这会导致

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

最终使您的URL看起来像

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

我在这个网站上找到了一个在 Git bash 上适合我的解决方案:

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

当我在 git bash 中运行此命令时,我遇到了类似的问题。

ng b --prod=true --base-href "/my-href/"

我总是弄错这个 href:

<base href="C:/Program Files/Git/my-href/">

在运行相同的命令后,我得到了正确的行为,但在CMD中(Powershell也很好,Windows)。我得到了预期的结果

<base href="/my-href/">

设置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 的环境变量。这是一个 ;分隔字符串,其中每个部分都与每个参数的前部分进行比较,如果找到匹配项,则跳过该转换。禁止上述 3 种情况的路径转换的 MSYS2_ARG_CONV_EXCL 值的示例是/switch;/sdcard;--root=。

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

将dist发布的文件夹内容放在物理路径"C:/Program Files/Git/my-href/"中,打开index.html文件并将基本路径替换为"/my-href/">

对于 Git Bash 4 Windows,解决方案是:

ng build --configuration production --base-href='//context'

最新更新