• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧
您的位置:首页 > CMS教程 >建站教程 > Angular CLI发布路径的配置项浅析

Angular CLI发布路径的配置项浅析

作者:站长图库 字体:[增加 减小] 来源:互联网 时间:2022-04-29

站长图库向大家介绍了Angular CLI,发布路径,配置项等相关知识,希望对您有所帮助

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

前言

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

base-href

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

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

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

<body>    <app-root></app-root>    <script src="runtime.js"></script>    <script src="polyfill.js"></script>    <script src="styles.js"></script>    <script src="main.js"></script></body>

不过我们的项目常常放在一个子目录下运行,例如在 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,主要有三种方式:

在 index.html 中配置 <base href="XXX" rel="external nofollow" >

采用 CLI 命令行参数来配置:ng build --baseHref=/XXX/

在 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 为:

<body>    <app-root></app-root>    <script src="/app/resource/runtime.js"></script>    <script src="/app/resource/polyfill.js"></script>    <script src="/app/resource/styles.js"></script>    <script src="/app/resource/main.js"></script></body>

又例如有图片 ![](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 服务器中。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Angular CLI发布路径的配置项浅析

相关文章

  • 2022-04-29原生小程序如何封装请求,优雅地调用接口?
  • 2022-04-29举例说明JS调用PHP和PHP调用JS的方法
  • 2022-04-29Photoshop制作时尚风格文艺海报教程
  • 2022-04-29为什么不建议使用@import引入css
  • 2022-04-29浅谈Bootstrap中的自适应屏幕
  • 2022-04-29如何优化uniapp项目?分享几种优化方案及建议
  • 2022-04-29帝国备份王密码忘记了怎么办?
  • 2022-04-29给dedecms增加二维码功能
  • 2022-04-29织梦dedecms网站六大SEO优化技巧分享
  • 2022-04-29renderjs有什么用?聊聊uniapp中用renderjs的一些细节

文章分类

  • dedecms
  • ecshop
  • z-blog
  • UcHome
  • UCenter
  • drupal
  • WordPress
  • 帝国cms
  • phpcms
  • 动易cms
  • phpwind
  • discuz
  • 科汛cms
  • 风讯cms
  • 建站教程
  • 运营技巧

最近更新的内容

    • Oracle怎么将日期转为字符串
    • 手把手教你用PHP完成一个分布式事务TCC
    • 做好网站站内链接分配 提高网站百度指日可待
    • 分享一个Golang Http 验证码示例
    • PS打造线描风格舞者壁纸平面作品设计制作教程
    • 织梦DedeCMS实现按键盘方向键实现上一篇下一篇翻
    • Discuz!教程之删除注释云平台JS,加快Discuz访问
    • WordPress 彻底移除后台“隐私”设置功能
    • vue.js路由this.route.push跳转页面不刷新怎么办
    • PHP+Mysql+jQuery找回密码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有