小谈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 相关文章推荐
Microsoft Ajax Minifier 压缩javascript的方法
Mar 05 Javascript
juqery 学习之四 筛选查找
Nov 30 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
Dec 10 Javascript
JavaScript自定义日期格式化函数详细解析
Jan 14 Javascript
javascript最基本的函数汇总
Jun 25 Javascript
js实现不提交表单获取单选按钮值的方法
Aug 21 Javascript
基于canvas实现的钟摆效果完整实例
Jan 26 Javascript
AngularJS过滤器filter用法总结
Dec 13 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
layer.open 按钮的点击事件关闭方法
Aug 17 Javascript
深度解读vue-resize的具体用法
Jul 08 Javascript
在vscode 中设置 vue模板内容的方法
Sep 02 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
老司机传授Ubuntu下Apache+PHP+MySQL环境搭建攻略
2016/03/20 PHP
PHP中抽象类和抽象方法概念与用法分析
2016/05/24 PHP
PHP getName()函数讲解
2019/02/03 PHP
jQuery EasyUI API 中文文档 - Calendar日历使用
2011/10/19 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
2012/01/08 Javascript
JQuery select(下拉框)操作方法汇总
2015/04/15 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
AngularJS通过$location获取及改变当前页面的URL
2016/09/23 Javascript
jQuery的deferred对象使用详解
2016/09/25 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
深入理解Angular.JS中的Scope继承
2017/06/04 Javascript
使用iView Upload 组件实现手动上传图片的示例代码
2018/10/01 Javascript
详解微信小程序胶囊按钮返回|首页自定义导航栏功能
2019/06/14 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
electron+vue实现div contenteditable截图功能
2020/01/07 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
python实现在无须过多援引的情况下创建字典的方法
2014/09/25 Python
python列表操作实例
2015/01/14 Python
Python中用memcached来减少数据库查询次数的教程
2015/04/07 Python
Python和JavaScript间代码转换的4个工具
2016/02/22 Python
python 视频逐帧保存为图片的完整实例
2019/12/10 Python
python实现字符串和数字拼接
2020/03/02 Python
简单了解python调用其他脚本方法实例
2020/03/26 Python
python requests包的request()函数中的参数-params和data的区别介绍
2020/05/05 Python
Python random模块的使用示例
2020/10/10 Python
python语言实现贪吃蛇游戏
2020/11/13 Python
python 实现数据库中数据添加、查询与更新的示例代码
2020/12/07 Python
市场开发与营销专业求职信范文
2014/05/01 职场文书
学雷锋先进个人事迹
2014/05/26 职场文书
质量整改报告范文
2014/11/08 职场文书
幼儿教师辞职信
2015/02/27 职场文书
幼儿园大班教育随笔
2015/08/14 职场文书
初三英语教学反思
2016/02/15 职场文书
详解nodejs内置模块
2021/05/06 NodeJs