Angular 的文档告诉人们应该在 Angular 应用程序构建中使用 --base-href
参数,以便将其部署到子文件夹中:
如果将文件复制到服务器子文件夹中,请附加构建标志 --base-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
参数有什么区别?我应该什么时候使用每一个?
路由正在使用 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/
要将我的脚本放在“/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/ 目录中。
如果我想使用 /users
作为路由器的应用程序基础,并使用 /public
作为资产的基础,
ng build --prod --base-href /users/ --deploy-url /public
有关详细示例,请参阅 Shekhar Gulati's 博客。
--base-href /users/
而不是 --base-href /users
。 (缺少斜线)
--base-href
的终止斜杠,但根据 official docs,它很重要:<base href>
path
应该以“/”结尾,因为浏览器会忽略 { 4} 在最右边的“/”之后。
这里的答案并不完全准确、过时,也没有给出完整的解释。
我应该什么时候使用每一个?
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-href
在 index.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/">
,这将起作用。
{ path: 'myModule', loadChildren: () => import( './myModule/my.module' ).then( m => m.MyModule ) }