spritesmith.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. import fs from 'node:fs'
  2. import spritesmith from 'vite-plugin-spritesmith'
  3. export default function createSpritesmith(isBuild) {
  4. const spriteDirnames: string[] = []
  5. fs.readdirSync('src/assets/sprites').forEach((dirname) => {
  6. if (fs.statSync(`src/assets/sprites/${dirname}`).isDirectory()) {
  7. spriteDirnames.push(dirname)
  8. }
  9. })
  10. const plugin: any[] = []
  11. spriteDirnames.forEach((item) => {
  12. plugin.push(
  13. spritesmith({
  14. watch: !isBuild,
  15. src: {
  16. cwd: `./src/assets/sprites/${item}`,
  17. glob: '*.png',
  18. },
  19. target: {
  20. image: `./src/assets/sprites/${item}.png`,
  21. css: [
  22. [
  23. `./src/assets/sprites/_${item}.scss`,
  24. {
  25. format: 'handlebars_based_template',
  26. },
  27. ],
  28. ],
  29. },
  30. apiOptions: {
  31. cssImageRef: `@/assets/sprites/${item}.png`,
  32. spritesheet_info: {
  33. name: item,
  34. format: 'handlebars_based_template',
  35. },
  36. },
  37. customTemplates: {
  38. handlebars_based_template: './scss.template.hbs',
  39. },
  40. spritesmithOptions: {
  41. algorithm: 'binary-tree',
  42. padding: 10,
  43. },
  44. }),
  45. )
  46. })
  47. return plugin
  48. }