前沿
在ng build时,--base-hrf和--deploy-url两个参数不知大家有没有注意,以前没深究过,这次在项目中正好有场景使用,简单做总结记录;
要了解--base-href,首先要了解<base>标签得作用,在MDN官网对<base>有做解释:
MDN官网base解释
- HTML
<base>元素 指定用于一个文档中包含的所有相对 URL 的根 URL。一份中只能有一个<base>元素。 - 一个文档的基本 URL,可以通过使用
document.baseURI(en-US) 的 JS 脚本查询。如果文档不包含<base>元素,baseURI默认为document.location.href。 - 多个元素: 如果指定了多个
<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标签)
- Angular 项目都会使用默认的 HTML 5 风格,默认采用
PathLocationStrategy路由策略,使用浏览器的 history.pushState API 进行导航。借助pushState你自定义应用中的 URL 路径localhost:4200/crisis-center,应用内的 URL 和服务器的 URL 没有区别。 - 必须在应用的
index.html中添加一个<base href>元素才能让pushState路由正常工作。 浏览器要用<base href>的值为引用 CSS、脚本和图片文件时使用的相对 URL 添加前缀。 - 请把
<base>元素添加在<head>标签的紧后面。 - 若采用
HashLocationStrategy路由策略,<base href>中的片段(#后面的部分)永远不会被使用。 - 也可采用 DI令牌
APP_BASE_HREF配置<base href>
总结
deploy-url用于指定静态资源(如CSS,JavaScript文件)在服务器上的位置。如果您将应用程序部署到子目录中,则可以使用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-url和basehref是两个非常重要的选项,它们确保了Angular应用程序在服务器上正确运行,并且能够正确处理URL路径。
示例
可参考如下文章 shekhargulati.com/2017/07/06/…