小谈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 相关文章推荐
使用TextRange获取输入框中光标的位置的代码
Mar 08 Javascript
学习jquery之一
Apr 27 Javascript
对frameset、frame、iframe的js操作示例代码
Aug 16 Javascript
jquery 合并内容相同的单元格(示例代码)
Dec 13 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
JavaScript缓冲运动实现方法(2则示例)
Jan 08 Javascript
js实现交通灯效果
Jan 13 Javascript
Bootstrap fileinput文件上传组件使用详解
Jun 06 Javascript
vue.js移动端app之上拉加载以及下拉刷新实战
Sep 11 Javascript
vue-rx的初步使用教程
Sep 21 Javascript
解决Layui数据表格显示无数据提示的问题
Nov 14 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 获取远程网页内容的代码(fopen,curl已测)
2011/06/06 PHP
PHP基于数组实现的分页函数实例
2014/08/20 PHP
PHP封装的多文件上传类实例与用法详解
2017/02/07 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
laravel migrate初学常见错误的解决方法
2017/10/11 PHP
php+mysql实现的无限分类方法类定义与使用示例
2020/05/27 PHP
asp.net HttpHandler实现图片防盗链
2009/11/09 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
javascript检测浏览器flash版本的实现代码
2011/12/06 Javascript
JS原型对象通俗&quot;唱法&quot;
2012/12/27 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
JS动态日期时间的获取方法
2015/09/28 Javascript
jquery+php实现滚动的数字特效
2015/11/29 Javascript
js学习笔记之事件处理模型
2016/10/31 Javascript
jQuery时间验证和转换为标准格式的时间格式
2017/03/06 Javascript
基于Bootstrap框架菜鸟入门教程(推荐)
2017/09/17 Javascript
BootStrap Validator 根据条件在JS中添加或移除校验操作
2017/10/12 Javascript
Vue-cli 使用json server在本地模拟请求数据的示例代码
2017/11/02 Javascript
基于Vue sessionStorage实现保留搜索框搜索内容
2020/06/01 Javascript
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
Python装饰器(decorator)定义与用法详解
2018/02/09 Python
python得到电脑的开机时间方法
2018/10/15 Python
Python发送邮件功能示例【使用QQ邮箱】
2018/12/04 Python
python3中calendar返回某一时间点实例讲解
2020/11/18 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
Lancome兰蔻官方旗舰店:来自法国的世界知名美妆品牌
2018/06/14 全球购物
如何在存储过程中使用Loop
2016/01/05 面试题
internal修饰符起什么作用
2013/12/16 面试题
当当网软件测试笔试题
2015/11/24 面试题
几个常见的消息中间件(MOM)
2014/01/08 面试题
Java程序员面试题
2016/09/27 面试题
毕业生简历自我评价范文
2014/04/09 职场文书
化验室岗位职责
2015/02/14 职场文书
开业典礼致辞
2015/07/29 职场文书
浅谈Laravel中使用Slack进行异常通知
2021/05/29 PHP
Java 多线程协作作业之信号同步
2022/05/11 Java/Android