上一篇文章《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 源码学习笔记(二):目录结构的更多相关文章

  1. jquery源码学习笔记二:jQuery工厂

    笔记一里记录,jQuery的总体结构如下: (function( global, factory ) { //调用factory(工厂)生成jQuery实例 factory( global ); }( ...

  2. jQuery源码学习笔记二

    //添加实例属性和方法 jQuery.fn = jQuery.prototype = { // 版本,使用方式:$().jquery弹出当前引入的jquery的版本 jquery: core_vers ...

  3. yii2源码学习笔记(二十)

    Widget类是所有部件的基类.yii2\base\Widget.php <?php /** * @link http://www.yiiframework.com/ * @copyright ...

  4. yii2源码学习笔记(二)

    yii\base\Object代码详解 <?php /** * @link http://www.yiiframework.com/ * @copyright Copyright (c) 200 ...

  5. jquery源码学习笔记三:jQuery工厂剖析

    jquery源码学习笔记二:jQuery工厂 jquery源码学习笔记一:总体结构 上两篇说过,query的核心是一个jQuery工厂.其代码如下 function( window, noGlobal ...

  6. async-validator 源码学习笔记(四):validator

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  7. async-validator 源码学习笔记(三):rule

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 rule 主要实现的是校验规则,文件结构为下图: 一.rul ...

  8. async-validator 源码学习笔记(五):Schema

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  9. async-validator 源码学习笔记(六):validate 方法

    系列文章: 1.async-validator 源码学习(一):文档翻译 2.async-validator 源码学习笔记(二):目录结构 3.async-validator 源码学习笔记(三):ru ...

  10. Spring源码学习笔记12——总结篇,IOC,Bean的生命周期,三大扩展点

    Spring源码学习笔记12--总结篇,IOC,Bean的生命周期,三大扩展点 参考了Spring 官网文档 https://docs.spring.io/spring-framework/docs/ ...

随机推荐

  1. 【NetCore】依赖注入的一些理解与分享

    依赖注入 DI 前言 声明:我是一个菜鸟,此文是自己的理解,可能正确,可能有误.仅供学习参考帮助理解,如果直接拷贝代码使用造成损失概不负责. 相关的文章很多,我就仅在代码层面描述我所理解的依赖注入是个 ...

  2. 浅谈Java中linkedlist和arraylist区别

    在Java中,关于集合框架有这样一个体系结构: 其主要由两个接口派生而出:Collection和Map,然后再衍生出各自的一些实现类(比如Collection接口又被继承与Set和List接口,而他们 ...

  3. 蟒蛇书学习笔记——Chapter 09 Section 01 创建和使用类

    9.1 创建和使用类 9.1.1 创建Dog类   根据Dog类创建的每个实例都将存储名字和年龄,我们赋予了每条小狗蹲下(sit( ))和打滚(roll_over( ))的能力: class Dog: ...

  4. PHP面试常考内容之Memcache和Redis(1)

    你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...

  5. Solution -「NOI 2012」「洛谷 P2050」美食节

    \(\mathcal{Description}\)   Link.   美食节提供 \(n\) 种菜品,第 \(i\) 种的需求量是 \(p_i\),菜品由 \(m\) 个厨师负责制作,第 \(j\) ...

  6. Solution -「CF 1375G」Tree Modification

    \(\mathcal{Description}\)   Link.   给定一棵 \(n\) 个结点的树,每次操作选择三个结点 \(a,b,c\),满足 \((a,b),(b,c)\in E\),并令 ...

  7. CentOS7利用yum缓存搭建本地源

    CentOS7利用yum缓存搭建本地源 环境说明 [root@localhost ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 ( ...

  8. 微服务从代码到k8s部署应有尽有系列(四、用户中心)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  9. 『无为则无心』Python面向对象 — 52、私有成员方法(类中行为的封装)

    Python对于类的成员没有严格的访问控制限制,这与其他面向对象的编程语言是有所区别的. 关于私有方法其实和私有属性差不多,有如下要点: 1.通常我们约定,两个下划线开头的方法是私有方法. 2.类内部 ...

  10. Windows server 2016 2019远程端口修改操作

    windows server 2016 2019修改远程端口操作   一.修改3389远程端口 1,按"win+r"快捷键,在对话框中输入regedit 2, 找到路径 \HKEY ...