小谈angular ng deploy的实现


Posted in Javascript onApril 07, 2020

Angular CLI 在 8.3.0 发布过一个新命令 ng deploy,可以将 Angular 应用部署到远程服务器或云存储上面,例如:Firebase hosting、Azure、GitHub pages 等等,这也是算是 Angular CLI 最后一个将 Angular 应用从开发到部署打通全能选手工具了。

快速入门

这里我以ng-deploy-oss 为示例,演示如何将 Angular 应用部署到七牛云。

1、创建一个新项目

ng new hello-world --defaults

2、添加 ng-deploy-oss

ng add ng-deploy-oss

命令行会让你输入几个参数:

? 请选择云类型? 七牛云
? 请输入 AccessKey: test
? 请输入 SecretKey: test
? 所在机房支持: qiniu.zone.Zone_z0 - 华东
? 请输入 Bucket: ng-test
? 请输入路径前缀,如果不指定表示放在根目录下: 
? 请输入构建生产环境的 NPM 命令行(例如:npm run build),若为空表示自动根据 angular.json 构建生成环境 
UPDATE angular.json (3925 bytes)
UPDATE package.json (1511 bytes)

3、部署

ng deploy

最后直接打开浏览器,就能直接访问 ng build --prod 后的效果。

原理

事实上,ng deploy 如同其他 Angular schematics 指令 ng add、ng g 等类同,我曾经在 浅谈 Angular Cli Schematics 针对 Schematics 做过介绍。要自定义一个 ng deploy 只需要完成两个部分:

  • 编写 ng-add 来修改 angular.json 来告知使用哪个 Angular Libary 来部署;
  • 编写上传动作 createBuilder。

ng-add

给 angular.json 增加 deploy 节点:

{
  "serve": {},
+  "deploy": {
+    "builder": "ng-deploy-oss:deploy",
+    "options": {}
+  }
}

以及 package.json 的 devDependencies 增加依赖包:

+ "ng-deploy-oss": "~1.0.0",

有兴趣可以参考 ng-deploy-oss 的 ng-add 的完整写法。

createBuilder

它是一个固定的方法:

export default createBuilder<any>(async (schema: {}, context: BuilderContext): Promise<BuilderOutput> => {
  return { success: true };
});

将所有上传相关的动作写至该方法内;它返回的是一个 Promise<BuilderOutput> ,要告知 ng deploy 结束务必返回:return { success: true };。

如何部署至不同目标上

目前 ng deploy 只支持单个目标部署,有时多个远程部署也是刚需,比如像当你在做一个开源时总需要照顾国内、国外时,总是希望一份 gh-pages 和 七牛云(免费额度),我们只需要修改 angular.json

{
  "serve": {},
+  "deploy-qiniu": {
+    "builder": "ng-deploy-oss:deploy",
+    "options": {}
+  },
+  "deploy-gh-pages": {
+    "builder": "angular-cli-ghpages:deploy",
+    "options": {}
+  }
}

注意:angular-cli-ghpages:deploy 引用的是 angular-cli-ghpages 依赖包。

然后使用 ng run 来调用这两种不同目标:

ng run <project name>:deploy-qiniu
ng run <project name>:deploy-gh-pages

结论

Angular 在国内有些小窘境,ng deploy 发布这么久,一直都没见到对国内一些云存储进行适配;事实上,直接利用 ng deploy 来部署应用至远程服务器上,可能在越来越多 Docker 应用后变得没那么重要,但对于常写开源的人来说,能够快速将 Angular 应用部署至国内常见的几个云存储上还是挺有意义的。

到此这篇关于小谈angular ng deploy的实现的文章就介绍到这了,更多相关angular ng deploy内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
List the Stored Procedures in a SQL Server database
Jun 20 Javascript
js中判断文本框是否为空的两种方法
Jul 31 Javascript
40款非常棒的jQuery 插件和制作教程(系列二)
Nov 02 Javascript
javascript简易缓动插件(源码打包)
Feb 16 Javascript
Struts2的s:radio标签使用及用jquery添加change事件
Apr 08 Javascript
js计算精度问题小结
Apr 22 Javascript
关于include标签导致js路径找不到的问题分析及解决
Jul 09 Javascript
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
基于vue.js路由参数的实例讲解——简单易懂
Sep 07 Javascript
Javascript实现一朵从含苞到绽放的玫瑰
Mar 30 Javascript
vue 中使用 watch 出现了如下的报错的原因分析
May 21 Javascript
layui之数据表格--与后台交互获取数据的方法
Sep 29 Javascript
简单了解Vue + ElementUI后台管理模板
Apr 07 #Javascript
vue开发中遇到的问题总结
Apr 07 #Javascript
手把手教您实现react异步加载高阶组件
Apr 07 #Javascript
javascript绘制简单钟表效果
Apr 07 #Javascript
js中位数不足自动补位扩展padLeft、padRight实现代码
Apr 06 #Javascript
jquery实现两个div中的元素相互拖动的方法分析
Apr 05 #jQuery
js实现登录时记住密码的方法分析
Apr 05 #Javascript
You might like
ADODB类使用
2006/11/25 PHP
五款常用mysql slow log分析工具的比较分析
2011/05/22 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
浅析PHP类的反射来实现依赖注入过程
2018/02/06 PHP
js event事件的传递与冒泡处理
2009/12/06 Javascript
Ajax搜索结果页面下方的分页按钮的生成
2012/04/05 Javascript
js实现鼠标触发图片抖动效果的方法
2015/02/27 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
connection reset by peer问题总结及解决方案
2016/10/21 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
浅析bootstrap原理及优缺点
2017/03/19 Javascript
JavaScript实现前端实时搜索功能
2020/03/26 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
webstorm中vue语法的支持详解
2018/05/09 Javascript
element-ui组件中input等的change事件中传递自定义参数
2019/05/22 Javascript
使用Vue生成动态表单
2019/11/26 Javascript
基于JS正则表达式实现模板数据动态渲染(实现思路详解)
2020/03/07 Javascript
[02:45]DOTA2英雄敌法师基础教程
2013/11/25 DOTA
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
[01:11:21]DOTA2-DPC中国联赛 正赛 VG vs Elephant BO3 第一场 3月6日
2021/03/11 DOTA
Python批量发送post请求的实现代码
2018/05/05 Python
python flask几分钟实现web服务的例子
2019/07/26 Python
Pytorch 定义MyDatasets实现多通道分别输入不同数据方式
2020/01/15 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
Python %r和%s区别代码实例解析
2020/04/03 Python
Python数据可视化实现漏斗图过程图解
2020/07/20 Python
Python 实现一个计时器
2020/07/28 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
Mixbook加拿大:照片书,照片卡,剪贴簿,年历和日历
2017/02/21 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
final, finally, finalize的区别
2012/03/01 面试题
外贸业务员的岗位职责
2013/11/23 职场文书
教师党性分析材料
2014/02/04 职场文书
城南旧事读书笔记
2015/06/29 职场文书
观看禁毒宣传片后的感想
2015/08/11 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android