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/ ... 
随机推荐
- 详解xpath定位
			xpath定位 1.通过开发者工具直接copy 右击copy-copy xpath 2.串联的方式定位元素 from selenium import webdriverfrom time import ... 
- python基础语法_9-2函数式编程
			https://www.imooc.com/learn/317 大纲 1-函数式编程简介 2-高阶函数 3-把函数作为参数 4-map()函数 5-reduce()函数 6-filter()函数 7- ... 
- Keras学习:第一个例子-训练MNIST数据集
			import numpy as npimport gzip import struct import keras as ks import logging from keras.layers impo ... 
- Netty高级应用及聊天室实战
			Netty 高级应用 1. 编解码器 概念:在网络应用中,需要实现某种编解码器.将原始字节数据与自定义消息数据进行相互转换.网络中都是以字节码的形式传输的. 对Netty而言,编解码器由两部分组成:编 ... 
- 016 Linux 卧槽,看懂进程信息也不难嘛?top、ps
			目录 1 扒开看看 top 命令参数详情 第一行,[top - ]任务队列信息 第二行,[Tasks] 任务(进程) 第三行,[Cpu(s)]状态信息 第四行,[Mem]内存状态 第五行,[Swap] ... 
- 开源GenICam项目上手-1
			GenICam 说明 一个统一的编程规则,这样我们只需要一个应用软件,就可以支持符合标准的不同型号相机,当我们升级相机.更换相机时,不需要编写不同的软件代码. The goal of GenICamT ... 
- DevOpts 前端开发和 Spug
			DevOpts 前端开发和 Spug 朋友新工作是进行 DevOpts 前端开发,涉及 Spug. DevOps 是什么 DevOps 是一种思想.用于促进开发和运维之间的沟通.协作或整合. Tip: ... 
- python中类的调用
			1 class Computer: # 创建类,类名首字母大写 2 screen = True # 类的属性 3 4 def start(self): # 创建实例方法,不要漏了 self 5 pri ... 
- react中配置路由
			一个路由就是一个通道,页面之间的跳转其实就是路由的切换,所以每个应用的路由配置是必须的,浅谈react中怎么配置路由 首先你要在src文件夹下新建一个router的文件下,在router文件下新建一个 ... 
- OJ教程--DevC++快捷键
			一些常用的快捷键如下: 1.F9编译 2.F10运行 3.F11编译+运行 4.Ctrl + Home键 跳转到当前文本的开头处. 5.Ctrl + End键 跳转到当前文本的末尾处. 6.Ctrl ... 
