小谈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 相关文章推荐
IE6、IE7中获取Button元素的值的bug说明
Aug 28 Javascript
alert中断settimeout计时功能
Jul 26 Javascript
利用js动态添加删除table行的示例代码
Dec 16 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
Mar 13 Javascript
js实现新浪微博首页效果
Oct 16 Javascript
Jquery实现上下移动和排序代码
Oct 17 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
Feb 14 Javascript
ajax请求data遇到的问题分析
Jan 18 Javascript
vue+element-ui+ajax实现一个表格的实例
Mar 09 Javascript
详解Vue中watch的高级用法
May 02 Javascript
layui问题之渲染数据表格时,仅出现10条数据的解决方法
Sep 12 Javascript
微信小程序手动添加收货地址省市区联动
May 18 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
php事务处理实例详解
2014/07/11 PHP
ThinkPHP、ZF2、Yaf、Laravel框架路由大比拼
2015/03/25 PHP
ThinkPHP自定义Redis处理SESSION的实现方法
2016/05/16 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
详解PHP神奇又有用的Trait
2019/03/25 PHP
Gambit vs ForZe BO3 第二场 2.13
2021/03/10 DOTA
用YUI做了个标签浏览效果
2007/02/20 Javascript
JavaScript 学习小结(适合新手参考)
2009/07/30 Javascript
用JavaScript对JSON进行模式匹配(Part 1-设计)
2010/07/17 Javascript
使用Jquery Aajx访问WCF服务(GET、POST、PUT、DELETE)
2012/03/16 Javascript
基于jQuery的倒计时实现代码
2012/05/30 Javascript
JavaScript设计模式之外观模式实例
2014/10/10 Javascript
node.js中的fs.appendFileSync方法使用说明
2014/12/17 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
jQuery页面刷新(局部、全部)问题分析
2016/01/09 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
详解jQuery中基本的动画方法
2016/12/14 Javascript
Vue 2.x教程之基础API
2017/03/06 Javascript
使用jQuery实现简单的tab框实例
2017/08/22 jQuery
微信小程序自定义菜单切换栏tabbar组件代码实例
2019/12/30 Javascript
详解Vue Cli浏览器兼容性实践
2020/06/08 Javascript
[02:50]【扭转乾坤,只此一招】DOTA2全新版本永雾林渊开启新篇章
2020/12/24 DOTA
python使用arp欺骗伪造网关的方法
2015/04/24 Python
独特的python循环语句
2016/11/20 Python
python编辑用户登入界面的实现代码
2018/07/16 Python
Python面向对象封装操作案例详解
2019/12/31 Python
tensorflow 实现自定义梯度反向传播代码
2020/02/10 Python
用Python进行websocket接口测试
2020/10/16 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
Theflamel意大利:女士奢华服装、鞋子和配件
2020/01/11 全球购物
Linux内核的同步机制是什么?主要有哪几种内核锁
2013/01/03 面试题
关于环保的建议书
2014/05/12 职场文书
医院保洁员管理制度
2015/08/05 职场文书
2016大学生国家助学贷款承诺书
2016/03/25 职场文书
vue选项卡切换的实现案例
2022/04/11 Vue.js