小谈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 相关文章推荐
分享一个用Mootools写的鼠标滑过进度条改变进度值的实现代码
Dec 12 Javascript
jQuery学习笔记之 Ajax操作篇(三) - 过程处理
Jun 23 Javascript
js+csss实现的一个带复选框的下拉框
Sep 29 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
Sep 05 Javascript
jQuery Ajax实现跨域请求
Jan 21 Javascript
JavaScript 获取元素在父节点中的下标(推荐)
Jun 28 Javascript
基于angular-utils-ui-breadcrumbs使用心得(分享)
Nov 03 Javascript
vue-cli 组件的导入与使用教程详解
Apr 11 Javascript
使用vuex的state状态对象的5种方式
Apr 19 Javascript
前端Vue项目详解--初始化及导航栏
Jun 24 Javascript
js实现圆形菜单选择器
Dec 03 Javascript
three.js中多线程的使用及性能测试详解
Jan 07 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
基于Zookeeper的使用详解
2013/05/02 PHP
php echo, print, print_r, sprintf, var_dump, var_expor的使用区别
2013/06/20 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
文件上传之SWFUpload插件(代码)
2015/07/30 PHP
DEFER怎么用?
2006/07/01 Javascript
基本jquery的控制tabs打开的数量的代码
2010/10/17 Javascript
Event altKey,ctrlKey,shiftKey属性解析
2013/12/18 Javascript
setTimeout自动触发一个js的方法
2014/01/15 Javascript
页面加载完后自动执行一个方法的js代码
2014/09/06 Javascript
Jquery全屏相册插件zoomvisualizer具有调节放大与缩小功能
2015/11/02 Javascript
深入对Vue.js $watch方法的理解
2017/03/20 Javascript
Nodejs搭建wss服务器教程
2017/05/24 NodeJs
使用Vue-Router 2实现路由功能实例详解
2017/11/14 Javascript
判断滚动条滑到底部触发事件(实例讲解)
2017/11/15 Javascript
VueJs 将接口用webpack代理到本地的方法
2017/11/27 Javascript
vue2.x集成百度UEditor富文本编辑器的方法
2018/09/21 Javascript
微信小程序实现canvas分享朋友圈海报
2020/06/21 Javascript
python获取网页状态码示例
2014/03/30 Python
全面解读Python Web开发框架Django
2014/06/30 Python
Python实现的插入排序算法原理与用法实例分析
2017/11/22 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
python使用pil进行图像处理(等比例压缩、裁剪)实例代码
2017/12/11 Python
安装python3的时候就是输入python3死活没有反应的解决方法
2018/01/24 Python
tensorflow创建变量以及根据名称查找变量
2018/03/10 Python
浅谈keras中的目标函数和优化函数MSE用法
2020/06/10 Python
基于zepto的插件之移动端无缝向上滚动并上下触摸滑动实例代码
2016/12/20 HTML / CSS
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
意大利文具和办公产品在线商店:Y-Office
2020/02/27 全球购物
客房主管岗位职责
2013/12/09 职场文书
我的五年职业生涯规划
2014/01/23 职场文书
《骆驼和羊》教学反思
2014/02/27 职场文书
社区工作者感言
2014/03/02 职场文书
环境科学专业求职信
2014/08/04 职场文书
爱的承诺书
2015/01/20 职场文书
企业百日安全活动总结
2015/05/07 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL