| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 开发测试 -> 现代配置指南——YAML 比 JSON 高级在哪? -> 正文阅读 |
|
[开发测试]现代配置指南——YAML 比 JSON 高级在哪? |
一直以来,前端工程中的配置大多都是?
这些配置对前端非常友好,因为都是我们熟悉的 JS 对象结构。一般静态化的配置会选择 json 文件,而动态化的配置,涉及到引入其他模块,因此会选择 js 文件。 还有现在许多新工具同时支持多种配置,比如?
后来不知道什么时候,突然出现了一种以? 既然遇到了,那就探索它! 下面我们从 YAML 的出现背景,使用场景,具体用法,高级操作四个方面,看一下这个流行的现代化配置的神秘之处。 出现背景一个新工具的出现避免不了有两个原因:
YAML 这种新工具就属于后者。其实在 yaml 出现之前? 很多文章说选择 yaml 是因为 json 的各种问题,json 不适合做配置文件,这我觉得有些言过其实了。我更愿意将 yaml 看做是 json 的升级,因为 yaml 在格式简化和体验上表现确实不错,这个得承认。 下面我们对比 YAML 和 JSON,从两方面分析: 精简了什么?JSON 比较繁琐的地方是它严格的格式要求。比如这个对象:
在 JSON 中以下写法通通都是错的:
字符串的值必须 k->v 都是?
虽然是统一格式,但是使用上确实有不便利的地方。比如我在浏览器上测出了接口错误。然后把参数拷贝到 Postman 里调试,这时就我要手动给每个属性和值加?""?号,非常繁琐。 YAML 则是另辟蹊径,直接把字符串符号干掉了。上面对象的同等 yaml 配置如下:
没错,就这么简单! 除了? 于是呢,以这个对象数组为例:
转换成 yaml 是这样的:
对比一下这个精简程度,有什么理由不爱它? 增加了什么?说起增加的部分,最值得一提的,是 YAML 支持了? 用 JSON 写配置是不能有注释的,这就意味着我们的配置不会有备注,配置多了会非常凌乱,这是最不人性化的地方。 现在 yaml 支持了备注,以后配置可以是这样的:
把这种配置丢给新同事,还怕他看不懂配了啥吗? 除注释外,还支持配置复用的相关功能,这个后面说。 使用场景我接触的第一个 yaml 配置是 Flutter 项目的包管理文件? 看一下它的基本结构:
你看这个结构和? 后来在做 CI/CD 自动化部署的时候,我们用到了 GitHub Action。它需要多个 yaml 文件来定义不同的工作流,这个配置可比 flutter 复杂的多。 其实不光 GitHub Action,其他流行的类似的构建工具如 GitLab CI/CD,circleci,全部都是齐刷刷的 yaml 配置,因此如果你的项目要做 CI/CD 持续集成,不懂 yaml 语法肯定是不行的。 还有,接触过 Docker 的同学肯定知道 Docker Compose,它是 Docker 官方的单机编排工具,其配置文件? 上面说的这 3 个案例,几乎都是现代最新最流行的框架/工具。从它们身上可以看出来,yaml 必然是下一代配置文件的标准,并且是前端-后端-运维的通用标准。 说了这么多,你跃跃欲试了吗?下面我们详细介绍 yaml 语法。 YAML 语法介绍 yaml 语法会对比 json 解释,以便我们快速理解。 先看一下 yaml 的几个特点:
相比于 JSON 来说,最大的区别是用? YAML 支持以下几种数据结构:
对象先看对象,上一个 json 例子:
转换成 yaml:
对象是最核心的结构,key 值的表示方法是? 数组数组和对象的结构差不多,区别是在 key 前用一个?
转换成 JSON 格式如下:
了解了基本的对象和数组,我们再来看一个复杂的结构。 众所周知,在实际项目配置中很少有简单的对象或数组,大多都是对象和数组相互嵌套而成。在 js 中我们称之为对象数组,而在 yaml 中我们叫? 比如这样一个稍复杂的 JSON:
转换成复合结构的 YAML:
纯量纯量比较简单,对应的就是 js 的基本数据类型,支持如下:
比较特殊的两个,null 用?
转换成 JS 后:
高级操作在 yaml 实战过程中,遇到过一些特殊场景,可能需要一些特殊的处理。 字符串过长在 shell 中我们常见到一些参数很多,然后特别长的命令,如果命令都写在一行的话可读性会非常差。 假设下面的是一条长命令:
在 linux 中可以这样处理:
就是在每行后加?
YAML 默认会把换行符转换成
然而有时候,我们的需求是保留换行符,并不是把它转换成空格,又该怎么办呢? 这个也简单,只需要在首行加一个?
转换成 JSON 变成了这样:
获取配置获取配置是指,在 YAML 文件中定义的某个配置,如何在代码(JS)里获取? 比如前端在?
JSON 是可以直接导入的,YAML 可就不行了,那怎么办呢?我们分环境解析: 在浏览器中 浏览器中代码用 webapck 打包,因此加一个 loader 即可:
然后配置 loader:
在组件中使用:
在 Node.js 中 Node.js 环境下没有 Webpack,因此读取 yaml 配置的方法也不一样。 首先安装一个?
然后通过模块提供的方法获取:
配置项复用配置项复用的意思是,对于定义过的配置,在后面的配置直接引用,而不是再写一遍,从而达到复用的目的。 YAML 中将定义的复用项称为锚点,用
对应的 JSON 如下:
但是锚点有个弊端,就是不能作为?
此时 key2 的值就是普通字符串 _my name is *name_,引用变得无效了。 其实在实际开发中,字符串中使用变量还是很常见的。比如在复杂的命令中多次使用某个路径,这个时候这个路径就应该是一个变量,在多个命令中复用。 GitHub Action 中有这样的支持,定义一个环境变量,然后在其他的地方复用:
这种实现方式与 webpack 中使用环境变量类似,在构建的时候将变量替换成对应的字符串。 如果你想开发小程序或者APP软件,可以通过专业开发公司,来帮助你实现开发需求:厦门在乎科技-专注小程序开发、APP开发、网站开发、H5小游戏开发 |
|
开发测试 最新文章 |
pytest系列——allure之生成测试报告(Wind |
某大厂软件测试岗一面笔试题+二面问答题面试 |
iperf 学习笔记 |
关于Python中使用selenium八大定位方法 |
【软件测试】为什么提升不了?8年测试总结再 |
软件测试复习 |
PHP笔记-Smarty模板引擎的使用 |
C++Test使用入门 |
【Java】单元测试 |
Net core 3.x 获取客户端地址 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/18 7:39:33- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |