Angular的文档告诉我们,当Angular应用程序要部署到子文件夹中时,应该在Angular应用程序构建中使用--base-href参数:

如果将文件复制到服务器子文件夹中,请附加build标志,

例如,如果index.html在服务器/my/app/index.html上, 将基本HREF设置为<base href="/my/app/">,如下所示.

https://angular.io/guide/deployment

但是,Angular CLI的参数为--deploy-url.该工具的文档将其描述为:

将部署文件的URL.

https://github.com/angular/angular-cli/wiki/build

我见过当应用程序要部署在子文件夹中时,使用--deploy-url而不是--base-href的解决方案.

#问题是#

Angular -CLI工具的--base-href个参数和--deploy-url个参数有什么不同?我应该什么时候使用每一种呢?

推荐答案

这里的答案并不完全准确、过时,也没有给出完整的解释.

我应该什么时候使用每一个?

tl;dr一般使用--base-href,因为--deploy-url

  1. 从v13开始就不推荐使用
  2. 将降低构建速度(虽然可能不会太大)
  3. 没有百分之一百零一的好处

如果您需要URL与放置assets资源 的位置不同,official documentation建议手动设置APP_BASE_HREF(不同的是,如果您将在https://example.com/public/提供Angular 文件,但希望web应用的URL为https://example.com/users/,则将--base-href设置为/public/,将APP_BASED_HREF设置为/users/)

angular cli工具的--base-href个参数和--deploy-url个参数之间有什么区别?

上面我已经列出了三个不同之处.

正如您在问题中所述,--base-hrefindex.html中设置<base href>(有关详细信息,请参阅Mozilla docs;有关含义,请参阅community wiki),而--deploy-url将为index.html文件中的相对链接添加前缀.

例如,以下index.html个片段:

<link rel="stylesheet" href="styles.HASH.css">
...
<script src="main.HASH.js" type="module"></script>

对于--deploy-url /public/,将输出为:

<link rel="stylesheet" href="/public/styles.HASH.css">
...
<script src="/public/main.HASH.js" type="module"></script>

--deploy-url似乎只是在链接前面加上前缀,所以如果你改为--deploy-url public,输出将几乎无法使用:

<link rel="stylesheet" href="publicstyles.HASH.css">
...
<script src="publicmain.HASH.js" type="module"></script>

最后,如果您的模板(HTML)使用指向资源的相对链接,例如包含<img src="assets/logo.jpg">header.component.html,但您使用的是--deploy-url /public/,则该链接将不带前缀,并且会显示损坏的图像.相反,如果使用--base-href /public/设置<base href="/public/">,则这将起作用.

Angular相关问答推荐

我使用最新的AuthGuard方法,应该使用路由重定向.UrlTree如果用户未登录但未能登录

如何将CDkDropList与Angular FormArray和FormGroup一起使用?

日语字符不受角形约束控制

带有两个注入服务的函数式解析器(Angular 15)

如何在Angular中执行一个操作条件为多个可观测值?

按Angular 从组件的 bootstrap 选项卡中删除活动类

如何通过innerHtml在模板中显示动态插入的动感图标?

Angular 如何渲染ngFor?

要素存储更改根存储状态

自定义垫日历中选定的日期(Angular material )

错误:服务或构建Angular 项目时模块构建失败

Angular 等待对话框未显示

将 html ngModel 值传递给服务Angular

如何在对话框angular material内对齐按钮?

如何在angular 5的组件中格式化日期

取消订阅服务中的http observable

由router-outlet 创建时如何将css类应用于组件元素?

Angular 2中基于Condition条件的点击事件

NG2-Charts 无法绑定到 datasets,因为它不是 canvas的已知属性

如何在Angular中使用带有 td 属性 colspan 的属性绑定?