热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

AngularCLI发布路径的配置项浅析

这篇文章主要给大家介绍了关于AngularCLI发布路径的配置项的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

前言

项目发布总需要根据具体情况配置打包,Angular CLI 提供了方便的打包工具 “ng build”。其中关于发布路径的配置有几样,这里总结汇总它们。

base-href

它指定的是项目构建的目录结构,例如设置为 "deploy-test",最后的打包结果就在 dist/deploy-test 目录下。

项目新建时,在 index.html 下默认是 ,也就是指定这个应用相对根目录运行。这时候,页面的相对路径会基于这个配置,例如 ![](image/test.png) 的实际访问路径是 /image/test.png。

它不会改变资源请求路径:


 
 
 
 
 

不过我们的项目常常放在一个子目录下运行,例如在 tomcat 的 webapps 下新建一个 “deploy-test” 项目目录。所以相应的,base-href 也要设置为 “/deploy-test/”。

要注意的是,这里的斜杠(/)必不可少,假设服务器子目录叫 “test”,打包部署情况如下:

  • test:如果两头都不加,baseHref 生效,可以获取到资源。但应用生成的浏览器路径错误,为 host:port/test/test#/index,刷新页面会找不到 index.html。
  • /test:只加开头,baseHref 无效,资源相对 host:port 根目录加载,报 404。
  • test/:只加结尾,资源请求路径为 host:port/test/test/XXX.js,报 404。
  • /test/:应用生成路径为 host:port/test/#/index,资源正确加载。

打包时要修改 base-href,主要有三种方式:

  1. 在 index.html 中配置
  2. 采用 CLI 命令行参数来配置:ng build --baseHref=/XXX/
  3. 在 angular.json 中配置:
 "architect": {
 "build": {
  "builder": "@angular-devkit/build-angular:browser",
  "options": {
  "baseHref": "/kanpm/",
  }
 }
 }

即 baseHref 用以配置应用的部署路径。

deploy-url

如果是将资源和应用放在同一个服务器目录下,baseHref 即可,但是如果资源和应用在不同位置呢?
例如,应用部署在 "/app" 目录下,资源文件放在 ”/app/resource“; 又或者想要通过 cdn(如 cdn.example.com)托管加速应用的各种资源,同时在自己服务器上部署应用本身。

配置 deploy-url 会在打包时修改资源请求路径,例如 --deploy-url=/app/resource/,则最后打包的 index.html 为:


 
 
 
 
 

又例如有图片 ![](test.png),最后打包后路径就会便变为 ”/app/resource/test.png“。

相应的,它也可以在 angular.json 或者命令行中配置

"architect": {
 "build": {
 "builder": "@angular-devkit/build-angular:browser",
 "options": {
  "deployUrl": "/test/",
 }
 }
}

或者 ng build --deploy-url="/test/"

✨注意:deploy-url 只能修改被打包的资源文件。

样式资源引入

设置了 base-href 之后,样式文件中引入的资源路径的行为在各个 CLI 的版本下会有不同:

  • 2~7 版本下会自动添加 base 路径。例如 url("/assets/path/to/my/asset.png"),会自动在前面叠加 base-href。
  • 8 版本临时新增了 --rebase-root-relative-css-urls=true 命令行参数,可以保持和之前版本行为一致,方便过渡,但是下个版本就废弃。
  • 9 以后的版本,要求使用相对路径来引入资源路径,所以组件中的样式文件引入可以这样写(url("~src/assets/path/to/my/asset.png"))。

因为 baseHref 是一个运行时的值,用以控制 Angular 应用的相对路径。不应该用来处理编译时的打包行为,针对打包的依赖管理,应该由 webpack 通过相对路径去识别,也方便对资源进行额外的处理(例如给资源文件名加上 hash 值,确保不会被缓存)。

✨注意:打包时,会导致需要打包资源会被 webpack 复制一份放入 dist 根目录(assets 文件夹中也还存在一份原版)。所以样式或组件中引入的文件,应该放在 assets 目录外,因为 CLI 创建项目时,angular.json 的默认配置是:

"architect": {
 "build": {
 ...
 "options": {
  "assets": [
  "src/favicon.ico",
  "src/assets",
  ],
 }
}

可以看到,默认配置中,assets 文件夹中的文件,都会不经打包直接复制到 dist 文件夹中(我个人觉得 Nuxt 的目录命名,叫 statics 静态文件夹就更贴切)。需要在组件中 import,或者样式文件中以相对路径引入的文件,就放另一个文件夹,不需要在 angular.jsn 中配置,以免打包后存在重复文件。

总结

我们可以试着把它们配合使用来总结一下:

ng build --prod --base-href="/kanpm/" rel="external nofollow" --deploy-url="/kanpm/resource/"

得到编译打包的 dist/kanpm 文件夹后,我们将所有打包编译的文件都放入服务器 kanpm/resource 目录下,而index.html 和其他直接复制的静态文件,放在服务器 kanpm/ 目录下。请求 host:port/kanpm 就会发现项目就成功运行了!

由此可以看出,base-href 决定的是应用的部署位置,也就是用户通过什么路径能够访问这个网站。而 deploy-url 决定的是打包后的资源文件(图片,字体,js等)被部署在哪里,可以如上示例是应用的子目录下,也可以是某个 cdn 服务器中。

到此这篇关于Angular CLI发布路径配置项的文章就介绍到这了,更多相关Angular CLI发布路径内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • 在IDEA中运行CAS服务器的配置方法
    本文介绍了在IDEA中运行CAS服务器的配置方法,包括下载CAS模板Overlay Template、解压并添加项目、配置tomcat、运行CAS服务器等步骤。通过本文的指导,读者可以轻松在IDEA中进行CAS服务器的运行和配置。 ... [详细]
  • loader资源模块加载器webpack资源模块加载webpack内部(内部loader)默认只会处理javascript文件,也就是说它会把打包过程中所有遇到的 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • Java实战之电影在线观看系统的实现
    本文介绍了Java实战之电影在线观看系统的实现过程。首先对项目进行了简述,然后展示了系统的效果图。接着介绍了系统的核心代码,包括后台用户管理控制器、电影管理控制器和前台电影控制器。最后对项目的环境配置和使用的技术进行了说明,包括JSP、Spring、SpringMVC、MyBatis、html、css、JavaScript、JQuery、Ajax、layui和maven等。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了通过ABAP开发往外网发邮件的需求,并提供了配置和代码整理的资料。其中包括了配置SAP邮件服务器的步骤和ABAP写发送邮件代码的过程。通过RZ10配置参数和icm/server_port_1的设定,可以实现向Sap User和外部邮件发送邮件的功能。希望对需要的开发人员有帮助。摘要长度:184字。 ... [详细]
  • Node.js学习笔记(一)package.json及cnpm
    本文介绍了Node.js中包的概念,以及如何使用包来统一管理具有相互依赖关系的模块。同时还介绍了NPM(Node Package Manager)的基本介绍和使用方法,以及如何通过NPM下载第三方模块。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • mui框架offcanvas侧滑超出部分隐藏无法滚动如何解决
    web前端|js教程off-canvas,部分,超出web前端-js教程mui框架中off-canvas侧滑的一个缺点就是无法出现滚动条,因为它主要用途是设置类似于qq界面的那种格 ... [详细]
  • Linux下部署Symfoy2对app/cache和app/logs目录的权限设置,symfoy2logs
    php教程|php手册xml文件php教程-php手册Linux下部署Symfoy2对appcache和applogs目录的权限设置,symfoy2logs黑色记事本源码,vsco ... [详细]
  • npmrunbuild后dist文件夹下面直接浏览器打开index.html,css和js的路径都不正确。放到跟目录下就正常了,iis上同样只能在根目录下。我项目的目录如下: ... [详细]
  • nginx+多个tomcat
    学习nginx的时候遇到的问题:nginx怎么部署两台tomcat?upstream在网上找的资源,我在nginx配置文件(nginx.conf)中添加了两个server。结果只显 ... [详细]
author-avatar
通天论坛it技术
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有