【问题标题】:Angular-cli build with base-href also return programs folder when using git bash使用 git bash 时,使用 base-href 构建的 Angular-cli 也会返回程序文件夹
【发布时间】:2017-07-06 16:11:29
【问题描述】:

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

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

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

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

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

有人知道吗?

【问题讨论】:

  • 您尝试将您当前的标签修改为什么,结果是什么?你说的标签是什么意思?
  • 你用 git bash 解决了这个问题吗?在这里遇到了同样的问题。
  • @MeMeMax 没有,还没有解决方案
  • @MeMeMax 我发布了一个新的解决方案,你可能想看看...

标签: angular angular-cli


【解决方案1】:

我在 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/">

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      设置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 值的一个示例是 /switch;/sdcard;--root=。

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

      【讨论】:

        【解决方案4】:

        TLDR:将第一个 / 替换为 &amp;#x2f;


        问题:

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

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

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

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

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

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

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

        http://hostname/directory/
        

        只是变成了

        http://directory/
        

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

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

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

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

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

        ng build --prod --base-href &#x2f;directory/
        

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

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

        这与

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

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

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

        最终使您的网址看起来像

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

        【讨论】:

        • 效果很好!谢谢。
        • 在我的情况下,在运行此命令 (ng build --prod --base-href /directory/) 后,基本 href 标记为空(href="")。
        【解决方案5】:

        迟到的答案,但我遇到了类似的问题,并且在 MINGW 中出现了该问题(我尝试在 Windows 10 上通过 GIT Bash 运行 ng-serve--base-href 参数)。只需在 Powershell 而不是 GIT Bash 中运行即可解决 - base-href 参数在那里处理得很好。

        【讨论】:

        • 谢谢!使用 &amp;#x2f; 的答案对我不起作用,但切换到 powershell 运行构建命令效果很好。
        • 谢谢!也救了我。 GIT BASH + ng serve --base-href = ISSUES
        猜你喜欢
        • 2020-08-09
        • 2018-06-01
        • 2018-04-06
        • 1970-01-01
        • 2020-10-11
        • 2017-03-01
        • 2017-11-12
        • 1970-01-01
        • 2017-04-08
        相关资源
        最近更新 更多