spritesmith.js 1.3 KB

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