async-validator 源码学习笔记(二):目录结构
上一篇文章《async-validator 源码学习(一):文档翻译》已经将 async-validator 校验库的文档翻译为中文,看着文档可以使用 async-validator 异步校验表单。本篇文章继续学习 async-validator 源码目录结构。
在项目中安装 async-validator:
npm i async-validator
之后,找到 async-valiror 文件夹,打开 package.json 文件,
一、配置及目录结构
package.json 的代码如下:
{
"name": "async-validator", // 名称
"description": "validate form asynchronous", //描述
"version": "4.0.7", //版本号
"license": "MIT", //许可证
"files": [ //包含文件
"dist-*/",
"bin/"
],
"pika": true,
"sideEffects": false,
"keywords": [ // 关键字,用于检索
"validator",
"validate",
"async"
],
"homepage": "https://github.com/yiminghe/async-validator",
"bugs": {
"url": "https://github.com/yiminghe/async-validator/issues"
},
"repository": { //仓库
"type": "git",
"url": "git@github.com:yiminghe/async-validator.git"
},
"dependencies": {}, //运行依赖
"devDependencies": { //开发依赖
"@babel/core": "^7.15.0",
"@babel/node": "^7.14.9",
"@babel/preset-env": "^7.8.7",
"@babel/preset-typescript": "^7.13.0",
"@pika/pack": "^0.5.0",
"@types/jest": "27.x",
"babel-jest": "27.x",
"coveralls": "^2.13.1",
"jest": "27.x",
"lint-staged": "^7.2.0",
"np": "^5.0.3",
"pika-plugin-build-web-babel": "^0.10.0",
"pika-plugin-ts-types": "0.1.x",
"pre-commit": "^1.2.2",
"prettier": "^1.11.1",
"typescript": "^4.3.2"
},
//定义js文件和无扩展名文件的处理方式
"types": "dist-types/index.d.ts",
"main": "dist-node/index.js", //指定入口文件
"module": "dist-web/index.js"//指定模块入口,main与module同时存在时优先使用module
}
也可在
https://github.com/yiminghe/async-validator 仓库中,查看源代码。
所有源文件目录为:
二、文件关系及作用
2.1、入口文件
"main": "dist-node/index.js", //指定入口文件
dist-node 中有 index.js 和 index.js.map 文件。
index.js 作为主入口文件,而 index.js.map 是 index.js 文件压缩后,文件的变量名替换对应、变量所在位置等元信息数据文件,一般与主文件放到同一目录下。
"module": "dist-web/index.js"//指定模块入口
dist-web 中有 index.js 和 index.js.map 文件
与上述的 dist-node 中的关系相同。
2.2、两个入口有什么区别?
{
"main": "dist-node/index.js", //指定入口文件
"module": "dist-web/index.js"//指定模块入口,
}
main 与 module 都是指定入口文件的,如果同时存在时优先使用 module 。两个 index.js的作用及区别:
dist-node 中的 index.js 文件
'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
.....
var Schema = /*#__PURE__*/function () { }
.....
exports['default'] = Schema;
dist-web 中的 index.js 文件
......
var Schema = /*#__PURE__*/function () { }
.....
export { Schema as default };
由于源码太长,此处不复制,可以自行去阅读这两个文件。这两个文件的内容除了 dist-node 中多了两行之外,剩余的内容完全一样。
你知道 Object.defineProperty(exports, '__esModule', { value: true }) 有什么作用呢?
它的作用是把一个导出对象标识为一个 ES 模块,也可以使用以下语法:
exports.__esModule = true
详情了解 main 和 module 的区别,可以查看《package.json 中,有多个入口文件可该咋办?》
2.3、校验主体
dist-types 中文件目录结构如图:
- util.d.ts 文件,是一个典型的工具函数库。
- interface.d.ts 文件来定义接口
- index.d.ts 文件 声明 Schema 类。
- rule 文件夹内定义的是校验规则。
- validator 文件内将检验的 value 分为各种类型,然后对不同类型进行不同的校验组合,执行最终的回调。
它们之间的关系为:
async-validator 源码学习笔记(二):目录结构的更多相关文章
- jquery源码学习笔记二:jQuery工厂
笔记一里记录,jQuery的总体结构如下: (function( global, factory ) { //调用factory(工厂)生成jQuery实例 factory( global ); }( ...
- jQuery源码学习笔记二
//添加实例属性和方法 jQuery.fn = jQuery.prototype = { // 版本,使用方式:$().jquery弹出当前引入的jquery的版本 jquery: core_vers ...
- yii2源码学习笔记(二十)
Widget类是所有部件的基类.yii2\base\Widget.php <?php /** * @link http://www.yiiframework.com/ * @copyright ...
- yii2源码学习笔记(二)
yii\base\Object代码详解 <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 200 ...
- jquery源码学习笔记三:jQuery工厂剖析
jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...
- async-validator 源码学习笔记(四):validator
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- async-validator 源码学习笔记(三):rule
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 rule 主要实现的是校验规则,文件结构为下图: 一.rul ...
- async-validator 源码学习笔记(五):Schema
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- async-validator 源码学习笔记(六):validate 方法
系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...
- Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点
Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...
随机推荐
- 如何快速为团队打造自己的组件库(上)—— Element 源码架构
文章已收录到 github,欢迎 Watch 和 Star. 简介 详细讲解了 ElementUI 的源码架构,为下一步基于 ElementUI 打造团队自己的组件库打好坚实的基础. 如何快速为团队打 ...
- vue/cli的目录结构说明
node_modules:npm 加载的项目所需要的各种依赖模块. src:这里是我们开发的主要目录(源码),基本上要做的事情都在这个目录里面,里面包含了几个目录及文件: 1.assets:放置一些图 ...
- Sunlogin RCE漏洞分析和使用
介绍 前两天网上曝出了关于向日葵远控工具(Sunlogin)Windows个人版的RCE漏洞POC.因为利用简单并且网上出现了公开的自动化扫描脚本,所以测试的人很多,也出现了一些真实攻击.漏洞的问 ...
- suse 12 二进制部署 Kubernetets 1.19.7 - 第07章 - 部署kube-controller-manager组件
文章目录 1.7.部署kube-controller-manager 1.7.0.创建kube-controller-manager请求证书 1.7.1.生成kube-controller-manag ...
- k8s-cka考试题库
本次测试的所有问题都必须在指定的cluster配置环境中完成.为尽量减少切换,系统已对问题进行分组,同一cluster内的所有问题将连续显示. 开启TAB补全 做题前先配置k8s自动补齐功能,否则无法 ...
- [源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(7) ---Distributed Hash之前向传播
[源码解析] NVIDIA HugeCTR,GPU 版本参数服务器---(7) ---Distributed Hash之前向传播 目录 [源码解析] NVIDIA HugeCTR,GPU 版本参数服务 ...
- yaml语法及格式校验
基本语法 1.yml文件以缩进代表层级关系 2.缩进不允许使用tab只能使用空格 3.空格的个数不重要,只要相同层级的元素左对齐即可 4.大小写敏感 5.数据格式为,名称:(空格)值 也就是说,如果冒 ...
- 带你玩转CompletableFuture异步编程
前言 最近在忙生活的第一个OKR,这个等等后面具体聊聊,今天开始恢复每周一篇原创,感谢小伙伴的不离不弃.这篇文章也是最近在Code Review的时候,看到的大家代码,想整体推下大家异步编程的思想,由 ...
- Three.js之绘制中文文字并跟随物体
本周更新的需求是物体上显示文字信息,效果图如下: 加载字体 import { FontLoader } from 'three/examples/jsm/loaders/FontLoader.js'; ...
- C语言中puts()和printf()区别
puts的功能更加单一,只能输出字符串:printf的功能更加广,可以格式化数据,输出多种类型的数据. puts()函数用来向标准输出设备(屏幕)写字符串并换行. 调用方式为puts(string): ...