欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用?Schema-Utils?對?Webpack?Plugin?進行配置項校驗的簡單用例

 更新時間:2022年03月10日 09:50:17   作者:前端西瓜哥  
schema-utils?庫用于在?loader?和?plugin?實例化時,對傳入的參數(shù)進行校驗,本文重點給大家介紹使用?Schema-Utils?對?Webpack?Plugin?進行配置項校驗的用例詳解,感興趣的朋友一起看看吧

今天來學習如何使用 webpack 官方提供的 schema-utils 庫。

schema-utils 庫用于在 loader 和 plugin 實例化時,對傳入的參數(shù)進行校驗。

如果格式正確,無事發(fā)生;如果錯誤,控制臺會顯示出比較詳細的報錯信息,并中斷腳本的執(zhí)行。

我們看個簡單的用例:

const { validate } = require("schema-utils");
const schema = {
  "type": "object",
  "properties": {
    "filename": {
      "type": "string",
    }
  },
  "additionalProperties": false
}
const options = { filename: true }
validate(
  schema, // 配置參數(shù)的結構描述
  options // 實例化插件時,傳入的配置參數(shù)
)

這里我們有一個 schema 對象,描述了配置項的結構:一個對象,只能有 filename 屬性,且該屬性的值為字符串類型。

options 假設為實例化插件時傳入的配置項,這里我故意給了一個錯誤的配置, filename 的值為布爾值。

于是 validate 方法拋出了錯誤,并說 filename 應該為字符串。

throw new _ValidationError.default(errors, schema, configuration);
    ^
ValidationError: Invalid configuration object. Object has been initialized using a configuration object that does not match the API schema.
 - configuration.filename should be a string.

下面我們通過開發(fā)一個插件為例,講解如何寫配置的格式檢驗。

假設我們要開發(fā)一款 HelloWorldPlugin 插件,作用是打包的時候,額外生成一個文件。

這個插件需要傳入 filename 和 content 參數(shù),其中 filename 是必填項,content 為選填。

schema.json

首先我們需要用到一個 schema.json 文件,用于描述配置項的結構。

{
  "type": "object",
  "properties": {
    "filename": {
      "description": "生成文件的名稱",
      "type": "string",
      "link": "https://cn.bing.com/"
    },
    "content": {
      "description": "文件內容",
      "type": "boolean",
      "link": "https://cn.bing.com/"
    }
  },
  "required": ["filename"],
  "additionalProperties": false
}

描述一個屬性的常用參數(shù):

  • type: 屬性類型。比如 string、boolean。
  • description: 對該屬性的描述。當配置的類型不對時,description 會被打印出來,向開發(fā)者提供屬性的相關信息
  • link: 屬性的詳細說明文檔鏈接,同樣會在類型錯誤時被打印出來。

對于一個對象:

  • required 是一個字符串數(shù)組,描述當前對象的哪些屬性是必填項。
  • additionalProperties 表示能否使用沒被顯式聲明的其他屬性名,默認值為 true。

描述一個 JSON 對象的模式是非常復雜的,更多用法可以去 JSON Schema 官網(wǎng)查閱相關文檔。

插件中的寫法

下面我們再看看插件類如何編寫。

const { validate } = require("schema-utils");
const schema = require('./schema.json')
class HelloWorldPlugin {
  options;
  constructor(options) {
    validate(schema, options);
    // 如果 validate 沒有報錯,下面的語句就能正確執(zhí)行
    this.options = options;
  }
  apply() {
    console.log('apply');
  }
}
module.exports = HelloWorldPlugin;

很簡單,引入 schema.json 賦值給 schema 對象,然后在構造函數(shù)中將 schema 和傳入的插件配置傳入到 validate 方法中。

不能通過檢驗的話,腳本會終止運行并提供錯誤信息。如果校驗通過,我們就繼續(xù)執(zhí)行后續(xù)的業(yè)務邏輯,比如將配置項保存起來。

修改報錯時輸出的信息

有時候,我們希望可以配置一下報錯時的報錯信息,讓信息更詳盡一些。

此時我們就可以用到 validate 方法第三個可選的配置參數(shù),這個參數(shù)用于修改報錯時輸出的信息。

validate(
  schema,
  options,
  {
    name: "【Hello World 插件】",
    baseDataPath: "配置項",
    postFormatter: (formattedError, error) => {
      // 做一些處理
      return formattedError;
    },
  }
);

這三個參數(shù)都是可選的。

  • name : 報錯信息中的插件名,默認值為字符串值 "Object"。
  • baseDataPath: 默認值為 "configuration"。

這兩個參數(shù)也可以改放到 schema.json,只需要在最上層的對象加多一個 "title" 屬性即可。這個屬性會以最后一個空格符將字符串分隔,拿到 name 和 baseDataPath。

{
  "title": "【Hello World 插件】 配置項"
  "type": "object",
   // ...
}

如果二者都使用了,優(yōu)先使用 validate 方法傳入的配置。

  • postFormatter 是一個函數(shù),用于修改報錯信息。

postFormatter 能夠拿到即將輸出的錯誤信息字符串 formattedError,我們可以修改它然后返回,就能打印出修改過的錯誤信息內容。

另一個 error 參數(shù)則是一個描述了具體錯誤信息的對象,比如你可以通過 error.keyword 知道當前錯誤的類型。

默認的輸出內容:

添加了上面的配置后的輸出結果:

結尾

schema-utils 是 webpack 官方提供的配置項檢驗庫,能夠幫助我們校驗傳入配置正確與否,并能在匹配不對時,打印出比較詳細的報錯信息。

暴露的 validate 方法接受 對象描述結構(schema)、插件配置(options)以及 報錯信息配置(config)。

描述對象結構使用了 JSON Schema 標準,比較復雜,不過掌握一些比較常用的屬性其實已經夠用了。

到此這篇關于使用 Schema-Utils 對 Webpack Plugin 進行配置項校驗的文章就介紹到這了,更多相關Webpack Plugin配置項校驗內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 用JS實現(xiàn)根據(jù)當前時間隨機生成流水號或者訂單號

    用JS實現(xiàn)根據(jù)當前時間隨機生成流水號或者訂單號

    本文通過實例代碼給大家介紹了基于JS實現(xiàn)根據(jù)當前時間隨機生成流水號或者訂單號的相關知識,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-05-05
  • js中的循環(huán)方式及各種遍歷的方法

    js中的循環(huán)方式及各種遍歷的方法

    本文主要介紹了js中的循環(huán)方式及各種遍歷的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • 微信小程序ajax實現(xiàn)請求服務器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能示例

    微信小程序ajax實現(xiàn)請求服務器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能示例

    這篇文章主要介紹了微信小程序ajax實現(xiàn)請求服務器數(shù)據(jù)及模版遍歷數(shù)據(jù)功能,結合實例形式分析了微信小程序ajax調用及模板wx:for循環(huán)列表渲染相關操作技巧,需要的朋友可以參考下
    2017-12-12
  • JS驗證郵件地址格式方法小結

    JS驗證郵件地址格式方法小結

    這篇文章主要介紹了JS驗證郵件地址格式方法,結合兩個實例形式分析了JavaScript基于正則表達式進行郵件格式驗證的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-12-12
  • 微信小程序map組件結合高德地圖API實現(xiàn)wx.chooseLocation功能示例

    微信小程序map組件結合高德地圖API實現(xiàn)wx.chooseLocation功能示例

    這篇文章主要介紹了微信小程序map組件結合高德地圖API實現(xiàn)wx.chooseLocation功能,結合實例形式分析了map組件調用高德地圖API接口獲取地理位置提示列表并返回location相關操作技巧,需要的朋友可以參考下
    2019-01-01
  • 怎樣在CocosCreator中使用物理引擎關節(jié)

    怎樣在CocosCreator中使用物理引擎關節(jié)

    這篇文章主要介紹了怎樣在CocosCreator中使用物理引擎關節(jié),對物理引擎感興趣的同學,著重要看一下
    2021-04-04
  • webpack使用Symbol.toStringTag(Symbol.toStringTag用法)

    webpack使用Symbol.toStringTag(Symbol.toStringTag用法)

    Symbol.toStringTag是一個內置 symbol,它通常作為對象的屬性鍵使用,對應的屬性值應該為字符串類型,這個字符串用來表示該對象的自定義類型標簽,這篇文章主要介紹了webpack使用Symbol.toStringTag(Symbol.toStringTag用法),需要的朋友可以參考下
    2024-02-02
  • 原生JS實現(xiàn)圖片跑馬燈特效

    原生JS實現(xiàn)圖片跑馬燈特效

    這篇文章主要為大家詳細介紹了原生JS實現(xiàn)圖片跑馬燈特效,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • 淺談PDF.js使用心得

    淺談PDF.js使用心得

    本篇文章主要介紹了淺談PDF.js使用心得,pdf.js 是一個技術原型主要用于在 HTML5 平臺上展示 PDF 文檔,無需任何本地技術支持。非常具有實用價值,需要的朋友可以參考下
    2018-06-06
  • js上傳圖片預覽的實現(xiàn)方法

    js上傳圖片預覽的實現(xiàn)方法

    這篇文章主要為大家詳細介紹了js上傳圖片預覽的實現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05

最新評論