小谈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 相关文章推荐
javascript+xml实现简单图片轮换(只支持IE)
Dec 23 Javascript
将Datatable转化成json发送前台实现思路
Sep 06 Javascript
JavaScript学习笔记之数组随机排序
Mar 23 Javascript
基于jquery实现三级下拉菜单
May 10 Javascript
AngularJS 作用域详解及示例代码
Aug 17 Javascript
手机端实现Bootstrap简单图片轮播效果
Oct 13 Javascript
微信小程序组件 contact-button(客服会话按钮)详解及实例代码
Jan 10 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
详解angularjs跨页面传参遇到的一些问题
Nov 01 Javascript
vue计算属性get和set用法示例
Feb 08 Javascript
vue实现PC端录音功能的实例代码
Jun 05 Javascript
JavaScript实现单英文金山打字通
Jul 24 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知识收集
2012/08/20 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
php实现统计目录文件大小的函数
2015/12/25 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
PHP扩展Swoole实现实时异步任务队列示例
2019/04/13 PHP
用jquery与css打造个性化的单选框和复选框
2010/10/20 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
jQuery基于cookie实现的购物车实例分析
2015/12/24 Javascript
基于Bootstrap实现的下拉菜单手机端不能选择菜单项的原因附解决办法
2016/07/22 Javascript
JavaScript获取键盘按键的键码(参照表)
2017/01/10 Javascript
vuejs2.0子组件改变父组件的数据实例
2017/05/10 Javascript
浅谈通过JS拦截 pushState和replaceState事件
2017/07/21 Javascript
javascript中神奇的 Date对象小结
2017/10/12 Javascript
vue中路由参数传递可能会遇到的坑
2017/12/07 Javascript
vue-quill-editor富文本编辑器简单使用方法
2018/09/21 Javascript
vue使用混入定义全局变量、函数、筛选器的实例代码
2019/07/29 Javascript
Vue实现图片与文字混输效果
2019/12/04 Javascript
不刷新网页就能链接新的js文件方法总结
2020/03/01 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
[01:12:35]Spirit vs Navi Supermajor小组赛 A组败者组第一轮 BO3 第二场 6.2
2018/06/03 DOTA
以windows service方式运行Python程序的方法
2015/06/03 Python
GitHub 热门:Python 算法大全,Star 超过 2 万
2019/04/29 Python
对python中的装包与解包实例详解
2019/08/24 Python
浅析Django中关于session的使用
2019/12/30 Python
python 实现读取csv数据,分类求和 再写进 csv
2020/05/18 Python
前端实现背景虚化但内容清晰且自适应 的实例代码
2019/08/01 HTML / CSS
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
理货员的岗位职责
2013/11/23 职场文书
水利学院求职自荐书
2014/02/01 职场文书
个人欠款担保书
2014/05/20 职场文书
“四风”问题对照检查材料思想汇报
2014/09/16 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
群众路线教育实践活动学习笔记
2014/11/05 职场文书
2015年小学图书室工作总结
2015/05/18 职场文书
简短清晨问候语
2015/11/10 职场文书