ChatGPT解决这个技术问题 Extra ChatGPT

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

Angular 的文档告诉人们应该在 Angular 应用程序构建中使用 --base-href 参数,以便将其部署到子文件夹中:

如果将文件复制到服务器子文件夹中,请附加构建标志 --base-href 并适当地设置 。例如,如果 index.html 在服务器上的 /my/app/index.html 上,则像这样将基本 href 设置为

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 参数有什么区别?我应该什么时候使用每一个?


M
Mac_W

路由正在使用 Base-href

deploy-url 用于资产。

在大多数情况下,base-href 就足够了。

请看这些帖子:

https://github.com/angular/angular-cli/issues/9835

https://shekhargulati.com/2017/07/06/angular-4-use-of-base-href-and-deploy-url-build-options/


B
Bill Zelenko

要将我的脚本放在“/test/app1/script/”文件夹中,我使用了这个 command

ng build --prod --base-href /test/app1/ --deploy-url /test/app1/script/

因此,我的应用程序可在 https://example.com/test/app1/ 访问,但我的 JS 脚本和 CSS 位于 https://example.com/test/app1/script/ 目录中。


这是一个很好的答案,但要注意它会影响模块的延迟加载。例如:{ path: 'myModule', loadChildren: () => import( './myModule/my.module' ).then( m => m.MyModule ) }
L
Leponzo

如果我想使用 /users 作为路由器的应用程序基础,并使用 /public 作为资产的基础,

ng build --prod --base-href /users/ --deploy-url /public 

有关详细示例,请参阅 Shekhar Gulati's 博客。


我正在关注与此问题类似的线程。这是我的命令:“ng build --watch=true --baseHref=/dist/ --outputPath=D:\application_root\dist --deployUrl=/dist/”。我想说的是从 application_root 文件夹运行应用程序,但前端的所有代码都位于“dist”子文件夹中。我还必须将 index.html 从 dist 复制到根目录吗?
它是 --base-href /users/ 而不是 --base-href /users。 (缺少斜线)
在严重错误得到解决之前投反对票。我知道博客没有 --base-href 的终止斜杠,但根据 official docs,它很重要:<base href> path 应该以“/”结尾,因为浏览器会忽略 { 4} 在最右边的“/”之后。
a
ahong

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

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

tl;dr 通常使用 --base-href,因为 --deploy-url

自 Angular v13 起已弃用将降低构建速度(尽管可能不太显着)在“定位相对模板 (HTML) 资产和相对 fetch/XMLHttpRequests”中没有基本 href 的好处。

如果您需要与放置资产的位置不同的 URL,official documentation 建议手动设置 APP_BASE_HREF(如果您要提供不同的服务,例如将 --base-href 设置为 /public/ 并将 APP_BASED_HREF 设置为 /users/ https://example.com/public/ 处的 Angular 文件,但您希望网络应用的 URL 为 https://example.com/users/

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

上面我已经列出了 3 个不同之处。

正如您在问题中已经说明的那样,--base-hrefindex.html 中设置 <base href>(有关详细信息,请参阅 Mozilla docs,有关含义,请参阅 community wiki),而 --deploy-urlindex.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/">,这将起作用。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅