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

A.v*_*gen 4 angular-cli angular

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

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

ng build --prod --base-href /appcontext/
Run Code Online (Sandbox Code Playgroud)

我想要做的是修改我的当前基本标签与属性href="/"href="/appcontext/"

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

有人有什么想法?

ete*_*ity 7

迟到的回答,但我面临着类似的问题,它在MINGW发生这个问题(我试图运行ng-serve--base-href参数通过GIT猛砸在Windows 10).只需在Powershell中运行而不是GIT Bash解决 - base-href参数在那里处理得很好.


lee*_*mes 6

TLDR:首先替换//.


问题:

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

ng build --prod --base-href /directory/
Run Code Online (Sandbox Code Playgroud)

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

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

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

ng build --prod --base-href //directory/
Run Code Online (Sandbox Code Playgroud)

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

http://hostname/directory/
Run Code Online (Sandbox Code Playgroud)

但它只是变成了

http://directory/
Run Code Online (Sandbox Code Playgroud)

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

ng build --prod --base-href //hostname/directory/
Run Code Online (Sandbox Code Playgroud)

这里的问题是您的构建现在假定一个固定的主机名。由于我不喜欢该解决方案,因此我进行了进一步的试验并找到了一个不错的替代方案。

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

我发现了一个聪明的“黑客”:用 HTML 实体替换第一个斜杠。CLI 工具将该字符串原封不动地放入href="...", 并且不会(双重)转义&符号(恕我直言,它应该这样做)。斜线符号的可能实体是/,因此您的命令如下所示:

ng build --prod --base-href /directory/
Run Code Online (Sandbox Code Playgroud)

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

<base href="&#x2f;directory/">
Run Code Online (Sandbox Code Playgroud)

这完全“等效”(在 HTML/XML 意义上)到

<base href="/directory/">
Run Code Online (Sandbox Code Playgroud)

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

<base href="&amp;#x2f;directory/">
Run Code Online (Sandbox Code Playgroud)

最终使您的网址看起来像

http://hostname/&#x2f;directory/
Run Code Online (Sandbox Code Playgroud)


iFe*_*erx 6

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

\n
ng build \xe2\x80\x93base-href="//my-path\\\\" --prod\n
Run Code Online (Sandbox Code Playgroud)\n