angular中base-href和deploy-url作用

1,774 阅读3分钟

前沿

ng build时,--base-hrf--deploy-url两个参数不知大家有没有注意,以前没深究过,这次在项目中正好有场景使用,简单做总结记录; 要了解--base-href,首先要了解<base>标签得作用,在MDN官网对<base>有做解释:

MDN官网base解释

  1. HTML <base> 元素 指定用于一个文档中包含的所有相对 URL 的根 URL。一份中只能有一个 <base> 元素。
  2. 一个文档的基本 URL,可以通过使用 document.baseURI (en-US) 的 JS 脚本查询。如果文档不包含 <base> 元素,baseURI 默认为 document.location.href
  3. 多个元素: 如果指定了多个 <base> 元素,只会使用第一个 href 和 target 值,其余都会被忽略。(MDN base)

angular base解释

HTML 的 <base href="..." /> 标签指定了用于解析静态文件(如图片、脚本和样式表)相对地址的基地址。 比如,对于 <base href="/my/app/">,浏览器就会把 some/place/foo.jpg 这样的 URL 解析成到 my/app/some/place/foo.jpg 的请求。 在导航期间,Angular 路由器使用 base href 作为到组件模板文件和模块文件的基地址。(base标签

  1. Angular 项目都会使用默认的 HTML 5 风格,默认采用PathLocationStrategy路由策略,使用浏览器的 history.pushState API 进行导航。借助 pushState 你自定义应用中的 URL 路径 localhost:4200/crisis-center,应用内的 URL 和服务器的 URL 没有区别。
  2. 必须在应用的 index.html 中添加一个 <base href>元素才能让 pushState 路由正常工作。 浏览器要用 <base href> 的值为引用 CSS、脚本和图片文件时使用的相对 URL 添加前缀。
  3. 请把 <base> 元素添加在 <head> 标签的紧后面。
  4. 若采用HashLocationStrategy路由策略,<base href> 中的片段(#后面的部分)永远不会被使用。
  5. 也可采用 DI令牌 APP_BASE_HREF配置 <base href>

总结

deploy-url用于指定静态资源(如CSSJavaScript文件)在服务器上的位置。如果您将应用程序部署到子目录中,则可以使用deploy-url选项来设置相应的路径。

例如,如果您将应用程序部署到example.com/my-app/路径下,…

ng build --prod --deploy-url /my-app/

这将告诉Angular在生成HTML时将静态资源引用为/my-app/。这样,浏览器就可以正确地加载这些资源。

basehref选项用于指定应用程序在服务器上的根目录。它与deploy-url不同,因为它是关于整个应用程序的。如果您希望应用程序在example.com/my-app/路径下可…

ng build --prod --base-href /my-app/

这将告诉Angular在生成HTML时包括一个标记,在所有URL前面添加/my-app/。这样浏览器就知道从哪里获取应用程序,并且所有路由都会正确地处理。

总之,deploy-urlbasehref是两个非常重要的选项,它们确保了Angular应用程序在服务器上正确运行,并且能够正确处理URL路径。

示例

可参考如下文章 shekhargulati.com/2017/07/06/…