build-utils.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import fs from 'fs'
  2. import path from 'path'
  3. import gulp from 'gulp'
  4. import babel from 'gulp-babel'
  5. import uglify from 'gulp-uglify'
  6. import less from 'gulp-less'
  7. import cleanCSS from 'gulp-clean-css'
  8. import rename from 'gulp-rename'
  9. import postcss from 'gulp-postcss'
  10. import cssnano from 'gulp-cssnano'
  11. import autoprefixer from 'autoprefixer'
  12. import del from 'del'
  13. import px2Rpx from './px2Rpx'
  14. import getConfig from './get-core-config'
  15. import { generateScript, generateStyle, generateColor, getModifyVars, getFilesByNames, mkdirs } from './generate'
  16. export const config = getConfig()
  17. export const files = getFilesByNames(config.components || [])
  18. export const modifyVars = getModifyVars(config.themes || {})
  19. export const tplPath = path.join(__dirname, '../src/index.js.tpl')
  20. /**
  21. * Generate config.json
  22. */
  23. export const generateConfig = (dest) => (cb) => {
  24. mkdirs(dest, () => {
  25. fs.writeFile(`${dest}/config.json`, JSON.stringify(config, null, 4), (err) => {
  26. if (cb) cb()
  27. if (err) console.error(err)
  28. })
  29. })
  30. }
  31. /**
  32. * Generate index.js
  33. */
  34. export const generateFiles = (dest, compress) => {
  35. if (!compress) {
  36. return () => (
  37. gulp.src(tplPath)
  38. .pipe(generateScript(files))
  39. .pipe(rename({ basename: 'index', extname: '.js' }))
  40. .pipe(gulp.dest(dest))
  41. )
  42. }
  43. return () => (
  44. gulp.src(tplPath)
  45. .pipe(generateScript(files))
  46. .pipe(babel())
  47. .pipe(uglify())
  48. .pipe(rename({ basename: 'index', extname: '.js' }))
  49. .pipe(gulp.dest(dest))
  50. )
  51. }
  52. /**
  53. * Generate colors.js
  54. */
  55. export const generateColors = (paths, base, compress) => {
  56. if (!compress) {
  57. return () => (
  58. gulp.src(paths.src, { base })
  59. .pipe(generateColor(modifyVars))
  60. .pipe(gulp.dest(paths.dest))
  61. )
  62. }
  63. return () => (
  64. gulp.src(paths.src, { base })
  65. .pipe(generateColor(modifyVars))
  66. .pipe(babel())
  67. .pipe(uglify())
  68. .pipe(gulp.dest(paths.dest))
  69. )
  70. }
  71. /**
  72. * Customized theme
  73. */
  74. export const themes = (paths, base) => () => (
  75. gulp
  76. .src(paths.src, { base })
  77. .pipe(generateStyle(modifyVars))
  78. .pipe(gulp.dest(paths.dest))
  79. )
  80. /**
  81. * Clean files
  82. */
  83. export const clean = (dest) => () => del([dest])
  84. /**
  85. * Build styles
  86. */
  87. export const styles = (paths, base, format) => () => (
  88. gulp
  89. .src(paths.src, { base })
  90. .pipe(less({ modifyVars }))
  91. .pipe(px2Rpx())
  92. .pipe(postcss())
  93. .pipe(cleanCSS({ format: format ? false : 'beautify' }))
  94. // .pipe(
  95. // cssnano({
  96. // zindex: false,
  97. // autoprefixer: false,
  98. // discardComments: { removeAll: true },
  99. // })
  100. // )
  101. .pipe(rename({ extname: '.wxss' }))
  102. .pipe(gulp.dest(paths.dest))
  103. )
  104. /**
  105. * Build scripts
  106. */
  107. export const scripts = (paths, base) => () => (
  108. gulp.src(paths.src, { base })
  109. .pipe(babel())
  110. .pipe(uglify())
  111. .pipe(gulp.dest(paths.dest))
  112. )
  113. /**
  114. * Copy files
  115. */
  116. export const copy = (paths, base) => () => (
  117. gulp
  118. .src(paths.src, { base })
  119. .pipe(gulp.dest(paths.dest))
  120. )