Newer
Older
xc-metering-front / vite / plugins / spritesmith.ts
liyaguang on 19 Jul 2023 1 KB first commit
import fs from 'fs'
import spritesmith from 'vite-plugin-spritesmith'

export default function createSpritesmith(isBuild) {
  const spriteDirnames: string[] = []
  fs.readdirSync('src/assets/sprites').forEach((dirname) => {
    if (fs.statSync(`src/assets/sprites/${dirname}`).isDirectory()) {
      spriteDirnames.push(dirname)
    }
  })
  const plugin: any[] = []
  spriteDirnames.forEach((item) => {
    plugin.push(
      spritesmith({
        watch: !isBuild,
        src: {
          cwd: `./src/assets/sprites/${item}`,
          glob: '*.png',
        },
        target: {
          image: `./src/assets/sprites/${item}.png`,
          css: [
            [
              `./src/assets/sprites/_${item}.scss`,
              {
                format: 'handlebars_based_template',
              },
            ],
          ],
        },
        apiOptions: {
          cssImageRef: `@/assets/sprites/${item}.png`,
          spritesheet_info: {
            name: item,
            format: 'handlebars_based_template',
          },
        },
        customTemplates: {
          handlebars_based_template: './scss.template.hbs',
        },
        spritesmithOptions: {
          algorithm: 'binary-tree',
          padding: 10,
        },
      }),
    )
  })
  return plugin
}