Blame view

node_modules/we-cropper/scripts/build/build.js 1.85 KB
ce4c83ff   wxy   初始提交
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
  /**
   * Created by sail on 2017/6/11.
   */
  const fs = require('fs')
  const path = require('path')
  const rollup = require('rollup')
  const uglify = require('uglify-js')
  const zlib = require('zlib')
  const configs = require('./config')
  
  if (!fs.existsSync('dist')) {
    fs.mkdirSync('dist')
  }
  
  build(configs)
  
  function build (builds) {
    let built = 0
    const total = builds.length
    const next = () => {
      buildEntry(builds[built]).then(() => {
        built++
        if (built < total) {
          next()
        }
      }).catch(logError)
    }
    
    next()
  }
  
  function buildEntry (config) {
    const output = config.output
    const { file, banner } = output
    const isProd = /min\.js$/.test(file)
    return rollup.rollup(config)
      .then(bundle => bundle.generate(output))
      .then(({ code }) => {
        if (isProd) {
          var minified = (banner ? banner + '\n' : '') + uglify.minify(code, {
            output: {
              /* eslint-disable camelcase */
              ascii_only: true
              /* eslint-enable camelcase */
            }
          }).code
          return write(output.file, minified, true)
        } else {
          return write(output.file, code)
        }
      })
  }
  
  function write (dest, code, zip) {
    return new Promise((resolve, reject) => {
      function report (extra) {
        console.log(blue(path.relative(process.cwd(), dest)) + ' ' + getSize(code) + (extra || ''))
        resolve()
      }
      
      fs.writeFile(dest, code, err => {
        if (err) return reject(err)
        if (zip) {
          zlib.gzip(code, (err, zipped) => {
            if (err) return reject(err)
            report(' (gzipped: ' + getSize(zipped) + ')')
          })
        } else {
          report()
        }
      })
    })
  }
  
  function getSize (code) {
    return (code.length / 1024).toFixed(2) + 'kb'
  }
  
  function logError (e) {
    console.log(e)
  }
  
  function blue (str) {
    return '\x1b[1m\x1b[34m' + str + '\x1b[39m\x1b[22m'
  }