返回介绍

Ajv-pack

发布于 2024-08-14 01:17:13 字数 5361 浏览 0 评论 0 收藏 0

生成一个输出由 Ajv 编译的 JSON-schema 验证函数的模块。

目的

这个包允许为验证函数创建独立的模块,这些模块是预编译的,不需要 Ajv 就可以使用。它的必要性如下:

  • 为了减少浏览器包的大小 —— Ajv 没有包含在其中(尽管您拥有大量的 schema,当生成的验证码的总尺寸大于 Ajv 时,包可以变大)。
  • 为了减少启动时间 —— schema 的验证和编译将在构建期间进行。
  • 为了避免使用构造函数(用于 schema 编译)进行动态代码求值,可以在使用内容安全策略时禁用它。

::: warning 请注意 在很多情况下,在很多情况下,Ajv 可以正常工作,而 Ajv-pack 却不能。下面列出了其中一些情况。与使用 Ajv (它非常稳定并且经过了良好的测试)相比,建议更彻底地测试用这个包编译的模式。 :::

搭配 CLI

在大多数情况下,您可以通过 ajv-cli (>= 1.0.0) 使用这个包来生成导出验证函数的模块。

npm install -g ajv-cli
ajv compile -s schema.json -o validate_schema.js

validate_schema.js包含了导出验证函数的模块,可以绑定到应用程序中。

使用

npm install ajv-pack
var Ajv = require('ajv'); // version >= 4.7.4
var ajv = new Ajv({sourceCode: true}); // 需要配置该项
var pack = require('ajv-pack');

var schema = {
  type: 'object',
  properties: {
    foo: {
      type: 'string',
      pattern: '^[a-z]+$'
    }
  }
};

var validate = ajv.compile(schema);
var moduleCode = pack(ajv, validate);

// 现在你可以
// 1. 将模块代码写入文件
var fs = require('fs');
var path = require('path');
fs.writeFileSync(path.join(__dirname, '/validate.js'), moduleCode);

// 2. 引用模块
var requireFromString = require('require-from-string');
var packedValidate = requireFromString(moduleCode);

Ajv 仍然是一个运行时依赖项,但是生成的模块将只依赖于它的某些部分,如果您需要从代码中获取这些模块,那么整个 Ajv 将不会包含在其中。

限制条件

目前,ajv-pack 不支持以下 schema:

  • 自定义了compiledvalidated关键字;支持自定义的inlinemacro关键字。
  • 自定义格式(它们会在验证期间被忽略)。
  • 递归引用(支持对当前 schema { "$ref": "#" })的引用。
  • 异步模式(它们需要自定义关键字/格式)。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文