计划图
用于加载器和插件中验证选项的软件包 .
开始
开始,你需要安装 schema-utils数字 :
npm install schema-utils
API 密码
计划.json
{
"type": "object",
"properties": {
"option": {
"type": "boolean"
}
},
"additionalProperties": false
}
import { validate } from "schema-utils";
import schema from "./path/to/schema.json";
const options = { option: true };
const configuration = { name: "Loader Name/Plugin Name/Name" };
validate(schema, options, configuration);
schema
类型 : String
JSON计划.
简单的计划示例 :
{
"type": "object",
"properties": {
"name": {
"description": "This is description of option.",
"type": "string"
}
},
"additionalProperties": false
}
options
类型 : Object
带有选项的对象 .
import { validate } from "schema-utils";
import schema from "./path/to/schema.json";
const options = { foo: "bar" };
validate(schema, { name: 123 }, { name: "MyPlugin" });
configuration
允许配置验证符 .
配置 name 财务报告和审定财务报表baseDataPath 通过 title 财产在计划.
例如:
{
"title": "My Loader options",
"type": "object",
"properties": {
"name": {
"description": "This is description of option.",
"type": "string"
}
},
"additionalProperties": false
}
用于 baseDataPath 选项,用于 name 选项.
根据上文的例子 name 选项等于 My Loader,则 baseDataPath 选项等于 options。 。 。 .
name
类型 : Object
默认 : "Object"
允许在验证错误中设置名称 .
import { validate } from "schema-utils";
import schema from "./path/to/schema.json";
const options = { foo: "bar" };
validate(schema, options, { name: "MyPlugin" });
Invalid configuration object. MyPlugin has been initialised using a configuration object that does not match the API schema.
- configuration.optionName should be a integer.
baseDataPath
类型 : String
默认 : "configuration"
允许在验证错误中设置基础数据路径.
import { validate } from "schema-utils";
import schema from "./path/to/schema.json";
const options = { foo: "bar" };
validate(schema, options, { name: "MyPlugin", baseDataPath: "options" });
Invalid options object. MyPlugin has been initialised using an options object that does not match the API schema.
- options.optionName should be a integer.
postFormatter
类型 : Function
默认 : undefined
允许重塑错误 .
import { validate } from "schema-utils";
import schema from "./path/to/schema.json";
const options = { foo: "bar" };
validate(schema, options, {
name: "MyPlugin",
postFormatter: (formattedError, error) => {
if (error.keyword === "type") {
return `${formattedError}\nAdditional Information.`;
}
return formattedError;
},
});
Invalid options object. MyPlugin has been initialized using an options object that does not match the API schema.
- options.optionName should be a integer.
Additional Information.
实例
计划.json
{
"type": "object",
"properties": {
"name": {
"type": "string"
},
"test": {
"anyOf": [
{ "type": "array" },
{ "type": "string" },
{ "instanceof": "RegExp" }
]
},
"transform": {
"instanceof": "Function"
},
"sourceMap": {
"type": "boolean"
}
},
"additionalProperties": false
}
Loader
import schema from "path/to/schema.json";
import { getOptions } from "loader-utils";
import { validate } from "schema-utils";
function loader(src, map) {
const options = getOptions(this);
validate(schema, options, {
name: "Loader Name",
baseDataPath: "options",
});
// Code...
}
export default loader;
Plugin
import schema from "path/to/schema.json";
import { validate } from "schema-utils";
class Plugin {
constructor(options) {
validate(schema, options, {
name: "Plugin Name",
baseDataPath: "options",
});
this.options = options;
}
apply(compiler) {
// Code...
}
}
export default Plugin;
预编方案
在运行时负载时编译一个计划 ajv,这需要大约150ms 用于第一个计划a
工艺和每用一毫秒至一毫秒。 装入器或插件可以编译它
提前计划,而不是在检查中 validate 第四项论点是:
npx schema-utils precompile src/options.json
这个写着 src/options.check.js 在计划旁边。 上交,并用软件包发布:
import { validate } from "schema-utils";
import check from "./options.check.js";
import schema from "./options.json";
validate(schema, options, { name: "Loader Name" }, check);
当选项有效时,检查就是运行和 ajv 从未装入。 当他们
没有, validate 运行全部验证以报告错误,所以错误与
没有支票.
运行 schema-utils precompile --check src/options.json 在 CI 中, 当检查缺失时失败或
已经过时了 生成的模块可能需要 schema-utils 的附属关系
软件包。 它是一个ES模块 当最近的 package.json 已经 "type": "module"节点的方式
读取 .js 存档, 普通JS 除外.
与 --minify中,检查会删除它从未报告的错误对象,并有帮助者写入
而不是从 schema-utils,并用 webpack 本身的修饰器进行修改,需要
网络包装5.112.0或以后。 对于Webpack自己的选项,其尺寸和负载都不到一半
13米取而代之为21米. --check 必须给予同样的 --minify 比较正确的代码.
一个亲戚 $ref 到另一个文件 解决与计划。 从代码中编译一个计划, 使用
precompile(schema, { loadSchema, esm, minify }),它返回模块的来源.
允许禁用和启用验证(即 validate 函数什么都不做)
当您不想进行验证时, 这会有所帮助 production 建设.
import { disableValidation, enableValidation, validate } from "schema-utils";
// Disable validation
disableValidation();
// Do nothing
validate(schema, options);
// Enable validation
enableValidation();
// Will throw an error if schema is not valid
validate(schema, options);
// Allow to undestand do you need validation or not
const need = needValidate();
console.log(need);
您也可以使用 process.env.SKIP_VALIDATION env变量.
支持的值( 大小写不敏感) :
yes编号 :y编号 :true编号 :1编号 :onno编号 :n编号 :false编号 :0编号 :off
变量在 schema-utils 已装入,故在进程开始前设置:
SKIP_VALIDATION=y webpack
使用 enableValidation()编号 :disableValidation() 在进程运行时更改它 - 它们
立即生效,并适用于每份 schema-utils 过程.
捐款
请花点时间来读一下我们的贡献准则 如果你还没有这样做.
软件包本身运行于Node.js 10.13.0及以上,但非依赖性需要活性 LTS发布,所以使用一个来工作. CI 安装更年长的,对老年人进行测试 软件包支持的Node.js版本.