小谈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 相关文章推荐
Jquery升级新版本后选择器的语法问题
Jun 02 Javascript
jquery ajax请求实例深入解析
Nov 26 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
鼠标移到div,浮层显示明细,弹出层与div的上边距左边距重合(示例代码)
Dec 14 Javascript
JS提交form表单实例分析
Dec 10 Javascript
浅谈jquery高级方法描述与应用
Oct 04 Javascript
浅析JavaScript中的平稳退化(graceful degradation)
Jul 24 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
对vue 键盘回车事件的实例讲解
Aug 25 Javascript
elementUI Tree 树形控件的官方使用文档
Apr 25 Javascript
微信小程序实现渐入渐出动画效果
Jun 13 Javascript
vuejs移动端实现div拖拽移动
Jul 25 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基础知识:类与对象(3) 构造函数和析构函数
2006/12/13 PHP
PHP学习笔记之二
2011/01/17 PHP
解决File size limit exceeded 错误的方法
2013/06/14 PHP
php相对当前文件include其它文件的方法
2015/03/13 PHP
PHP 搜索查询功能实现
2016/11/29 PHP
创建无限极分类树型结构的简单方法
2017/06/20 PHP
laravel框架使用FormRequest进行表单验证,验证异常返回JSON操作示例
2020/02/18 PHP
Nigma vs Liquid BO3 第二场2.14
2021/03/10 DOTA
DOM下的节点属性和操作小结
2009/05/14 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
jQuery实现冻结表格行和列
2015/04/29 Javascript
JavaScript实现的类字典插入或更新方法实例
2015/07/10 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
jQuery如何封装输入框插件
2016/08/19 Javascript
浅谈js中StringBuffer类的实现方法及使用
2016/09/02 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
微信小程序如何获取用户手机号
2018/01/26 Javascript
Vue-cli Eslint在vscode里代码自动格式化的方法
2018/02/23 Javascript
JavaScript生成随机验证码代码实例
2019/09/28 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
Python使用min、max函数查找二维数据矩阵中最小、最大值的方法
2018/05/15 Python
python读取xlsx的方法
2018/12/25 Python
Python3.5面向对象程序设计之类的继承和多态详解
2019/04/24 Python
Python分支语句与循环语句应用实例分析
2019/05/07 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
python3模拟实现xshell远程执行liunx命令的方法
2019/07/12 Python
Python函数的默认参数设计示例详解
2019/12/01 Python
使用opencv中匹配点对的坐标提取方式
2020/06/04 Python
使用Python pip怎么升级pip
2020/08/11 Python
Visual Studio code 配置Python开发环境
2020/09/11 Python
基于html5实现的图片墙效果
2014/10/16 HTML / CSS
AmazeUI 输入框组的示例代码
2020/08/14 HTML / CSS
大学生的四年学习自我评价
2013/12/13 职场文书
詹天佑教学反思
2014/04/30 职场文书
使用这 6个Vue加载动画库来减少我们网站的跳出率
2021/05/18 Vue.js
用python批量解压带密码的压缩包
2021/05/31 Python