request在裸线webpack项目中导入时,我收到三条警告消息.在GitHub(运行npm install和npm start)上可以找到重现该错误的最小示例.
Critical dependency: the request of a dependency is an expression
我怎么能摆脱这个警告?
更多信息:
Webpack尝试require静态解析调用以创建最小的包.当库使用在需要调用变量(如这些线路中require('' + 'nodent'))的WebPack不能静态地解决这些问题,并导入整个包.
我的理由是,这种动态导入在生产中是不可取的,代码最好保持无警告.这意味着我想要任何可以解决问题的解决方案.例如:
ajv文件添加到我的项目中以某种方式覆盖require调用.hack.js有一个解决方案,使警告无声.但是,如果我想使用它,我必须等到它被释放,然后直到ajv-5.0.1-beta.3并har-validator发布后续更新.如果有办法强制request使用测试版har-validator,那将解决我的问题.我刚刚使用此命令创建了一个新的React应用程序:
create-react-app mysite.com
Run Code Online (Sandbox Code Playgroud)
安装后,当我尝试使用npm start和打开它时yarn start,我收到以下错误.
throw new Error('custom keyword definition is invalid: ' + this.errorsText(validateDefinition.errors));
^
Error: custom keyword definition is invalid: data.errors should be boolean
at Ajv.addKeyword (/Users/myAccount/Documents/Dev/Projects/ReactJS/mysite.com/node_modules/ajv/lib/keyword.js:65:13)
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我有 TypeScript NestJS 项目。
我需要验证传入 API 的 DTO。它可以被描述为“创建项目”,其中我们有建筑类型(房屋、公寓、花园),并且根据该类型我们需要定义:
房屋类型示例:
{
type: HOUSE,
floors: [
{
name: "1st floor",
rooms: [
{
name: "bedroom"
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
平面类型示例:
{
type: FLAT,
rooms: [
{
name: "bedroom"
}
]
}
Run Code Online (Sandbox Code Playgroud)
我过去在 的帮助下完成了这件事AJV,但现在当我们迁移到 NestJS 时,我们开始使用class-validator.
我的问题是,我是否可以在 中创建这些高级条件(例如,当类型为 FLAT 时,则仅期望 ROOMS,而不是 FLOORS)class-validator?
我需要验证我的 NodeJS 应用程序中的某个对象。我已经使用了一个很棒的库express-validator,它工作得很好,但是现在我需要验证不同的对象,不仅是请求,而且就 express 验证器利用validator库而言,它又不支持字符串类型以外的类型。
我发现了不同的变体,如Jsonschema、Ajv
它们提供了很棒的功能,但我需要能够设置错误消息,而不仅仅是捕获异常或从返回对象中解析它。像那样
var schema = {
"id": "/SimplePerson",
"type": "object",
"properties": {
"name": {"type": "string", "error": "A name should be provided"},
"address": {"$ref": "/SimpleAddress"},
"votes": {"type": "integer", "minimum": 1}
}
};
Run Code Online (Sandbox Code Playgroud)
所以我可以为每个属性设置错误消息。
是否有任何现有的解决方案来实现此功能?
可能的解决方案
我找到了一个很棒的库JSEN它提供了必要的功能。
我想根据另一个字段中的数据为一个字段指定正则表达式模式.这可能吗?我已经尝试过switch和$ data,但不知道如何使用它们.例如,如果数据如下:
{
"contacts":[
{
"mode":"Email",
"contact":"john.doe@abc.com"
},
{
"mode":"Phone",
"contact":"111-555-1234"
}
]
}
Run Code Online (Sandbox Code Playgroud)
和schema看起来像:
"$schema":"http://json-schema.org/draft-04/schema#",
"type":"object",
"properties":{
"Contacts":{
"type":"array",
"minItems":1,
"items":{
"type":"object",
"properties":{
"mode":{
"type":"string",
"enum":[
"Email",
"Phone"
]
},
"contact":{
"type":"string",
"pattern":"?????"
}
},
"required":[
"mode",
"contact"
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
如何根据模式中的数据设置联系模式,这样如果模式是电子邮件,它会验证联系人对电子邮件格式的正则表达式,如果模式是电话,它会验证联系人对电话格式的正则表达式?我有每个的正则表达式.我需要逻辑来选择其中一个.
假设我有架构和 JSON:
JSON 架构:
const schema = {
"$schema": "http://json-schema.org/draft-07/schema#",
"type": "object",
"required": [ "countries" ],
"definitions": {
"europeDef": {
"type": "object",
"required": ["type"],
"properties": { "type": {"const": "europe"} }
},
"asiaDef": {
"type": "object",
"required": ["type"],
"properties": { "type": {"const": "asia"} }
}
},
"properties": {
"countries": {
"type": "array",
"items": {
"oneOf":[
{ "$ref": "#/definitions/europeDef" },
{ "$ref": "#/definitions/asiaDef"}
]
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
JSON:
const data = {
"countries":[
{"type": "asia1"},
{"type": "europe1"}
]
}
Run Code Online (Sandbox Code Playgroud)
const isValid …Run Code Online (Sandbox Code Playgroud) 我使用的是ajv 8.6.2
我有使用默认导出针对 Draft-07 进行验证的架构
当我使用Draft-09 导出时,我的所有架构都会出现此错误:
no schema with key or ref "https://json-schema.org/draft-07/schema"
Run Code Online (Sandbox Code Playgroud)
如果我使用这个,也会出现同样的错误:
no schema with key or ref "https://json-schema.org/draft-09/schema"
Run Code Online (Sandbox Code Playgroud)
似乎无法弄清楚这里发生了什么?
每次运行时我都会遇到错误npm run build
错误:
/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/validate.js:66
const ajv = new Ajv({
^
TypeError: Ajv is not a constructor
at Object.<anonymous> (/home/ts34mpr/website/client/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/validate.js:66:13)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
at Module.load (node:internal/modules/cjs/loader:981:32)
at Function.Module._load (node:internal/modules/cjs/loader:822:12)
at Module.require (node:internal/modules/cjs/loader:1005:19)
at require (node:internal/modules/cjs/helpers:102:18)
at Object.<anonymous> (/home/ts34mpr/website/client/node_modules/mini-css-extract-plugin/node_modules/schema-utils/dist/index.js:6:5)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
Run Code Online (Sandbox Code Playgroud)
请问有人知道解决办法或者可以帮忙吗!谢谢
我用 ajv 进行 json 验证。我需要验证字符串数组。我知道哪些元素可以放置在那里,所以我做了适当的“枚举”。但在某些情况下,枚举可以为空,数组也可以为空。这是简单的测试:
var schema = {
"type":"array",
"items" : {
"type" : "string",
"enum" : []
}
}
var data = [];
var Ajv = require('./ajv-4.1.1.js');
var ajv = Ajv({
allErrors : true
});
var validate = ajv.compile(schema);
var valid = validate(data);
if (!valid)
console.log(validate.errors);
Run Code Online (Sandbox Code Playgroud)
结果我得到:
Error: schema is invalid:data.items.enum should NOT have less than 1 items, data.items should be array, data.items should match some schema in anyOf
Run Code Online (Sandbox Code Playgroud)
我可以将任何虚构的字符串添加到枚举数组中,但是是否可以以合法的方式验证这种情况?添加“minItems=0”限制没有帮助。
我不能使用空枚举真的是 json 模式草稿限制吗?
UPD:我希望在一般情况下验证代码:
var array = Object.keys(someObj); …Run Code Online (Sandbox Code Playgroud) 问题:
在我将AJV.js升级到版本6.4之后,我的供应商包包括"uri-js"ESNEXT版本而不是ES5版本,这打破了IE11的兼容性.
分析:
我认为AJV通过require('uri-js')电话引用了uri-js,并且uri-js有两种形式:
/node_modules/uri-js/dist/:
出于某种原因,Webpack(V 4.8)使用'es5'将uri-js的'esnext'风格捆绑到我的vendor-bundle中.我找不到如何/在哪里指定我的首选构建目标.
这是我的webpack.config.js:
const path = require("path");
const webpack = require("webpack");
const ExtractTextPlugin = require("extract-text-webpack-plugin");
const HtmlWebpackPlugin = require("html-webpack-plugin");
const CopyWebpackPlugin = require('copy-webpack-plugin');
module.exports = {
entry: {
app: './src/index.tsx'
},
output: {
filename: "js/[name].bundle.js",
path: __dirname + "/dist"
},
devtool: "source-map",
resolve: {
extensions: [".ts", ".tsx", ".js", ".jsx", ".json"]
},
module: {
rules: [
{
test: /\.tsx?$/,
loader: "ts-loader"
},
{
test: /\.less$/,
use: ExtractTextPlugin.extract({
use: [{
loader: …Run Code Online (Sandbox Code Playgroud) ajv ×10
json ×3
jsonschema ×3
javascript ×2
npm ×2
reactjs ×2
typescript ×2
validation ×2
webpack ×2
arrays ×1
build ×1
nestjs ×1
node.js ×1
request ×1
schema ×1