用于批量处理资源。
- transformImage 批量图片处理
- replaceFileContent 批量文件替换内容
- matcher 自定义处理匹配到的文件
批量图片处理
| 选项 | 类型 | 描述 | 
|---|---|---|
| entry | string | 图片入口目录 | 
| output | string | 图片出口目录 | 
| rules | Rule[] | 匹配图片规则 | 
| useFile | UseFile | 匹配被文件内用到的图片 | 
| mkdir | boolean | 是否创建文件夹 | 
| logFileGeneratePath | string | 日志文件存储路径 | 
| itemLog | boolean | 是否将每项的路径打印 | 
| 选项 | 类型 | 描述 | 
|---|---|---|
| name | 'png' or 'jpg' | 匹配的图片格式 | 
| format | Format | 如何处理 | 
| 选项 | 类型 | 描述 | 
|---|---|---|
| name | 'webp' or 'svg' | 要转变的图片格式 | 
| max | number | 图片的最大体质 | 
| min | number | 图片的最小体积 | 
| handle | (info: { rawName: R, formatName: F, entryPath: string, outputPath: string, size: number }) => Promise | 处理函数 | 
| 选项 | 类型 | 描述 | 
|---|---|---|
| dir | string | 文件入口目录 | 
| imageInFileAlias | Record<any, any> | 图片在文件内的别名 | 
批量文件替换内容
| 选项 | 类型 | 描述 | 
|---|---|---|
| entry | string | 文件入口目录 | 
| list | ReplaceInfo[] | 替换选项 | 
| logFileGeneratePath | string | 日志文件存储路径 | 
| itemLog | boolean | 是否将每项的路径打印 | 
| 选项 | 类型 | 描述 | 
|---|---|---|
| searchValue | string | 匹配值 | 
| replaceValue | List | 替换值 | 
自定义处理匹配到的文件。用法跟 webpack 相似。
示例
以更新大量组件的路径和 props 为例:
import matcher, {
  filterByContent,
  insertToLastImport,
  replaceContent
} from '/src/matcher'
matcher({
  entry: 'e:/HXL/工具/batch-handle-resource/test/data',
  rules: [
    {
      // 匹配 entery 文件夹下所有的 js 文件
      match: /\.js$/,
      use: [
        // filterByContent 用于过滤掉不存在该内容的文件
        filterByContent("import Header from 'src/components/Header/Header'"),
        // insertToLastImport 用于将该内容插入到最后一个 import 语句下面
        insertToLastImport(
          "import { headerDictionaries } from 'src/components/i18n/header/config/i18n/en'"
        ),
        // replaceContent 用于将替换文件内容
        replaceContent(
          [
            {
              searchValue: "import Header from 'src/components/Header/Header'",
              replaceValue: "import Header from 'src/components/i18n/header'"
            },
            {
              searchValue: '<Header />',
              replaceValue:
                '<Header dictionaries={headerDictionaries} styles={headerStyles} />'
            }
          ],
          true
        )
      ]
    }
  ]
})