Kaynağa Gözat

regular + min + gzipped versions of the bundle

Artur Paikin 8 yıl önce
ebeveyn
işleme
5f80d4c596
4 değiştirilmiş dosya ile 155 ekleme ve 55 silme
  1. 44 11
      bin/build-css.js
  2. 65 41
      bin/build-js.js
  3. 42 0
      bin/gzip.js
  4. 4 3
      package.json

+ 44 - 11
bin/build-css.js

@@ -12,15 +12,48 @@ function handleErr (err) {
   console.error(chalk.red('✗ Error:'), chalk.red(err.message))
 }
 
-sass.render({file: './src/scss/uppy.scss'}, function (err, sassResult) {
-  if (err) handleErr(err)
-  postcss([ cssnano, autoprefixer ])
-    .process(sassResult.css)
-    .then(function (postCSSResult) {
-      postCSSResult.warnings().forEach(function (warn) {
-        console.warn(warn.toString())
-      })
-      fs.writeFileSync('./dist/uppy.min.css', postCSSResult.css)
-      console.info(chalk.green('✓ Built Uppy CSS:'), chalk.magenta('uppy.min.css'))
+function minifyCSS () {
+  return new Promise(function (resolve) {
+    fs.readFile('./dist/uppy.css', function (err, css) {
+      if (err) handleErr(err)
+      postcss([ cssnano ])
+        .process(css)
+        .then(function (postCSSResult) {
+          postCSSResult.warnings().forEach(function (warn) {
+            console.warn(warn.toString())
+          })
+          fs.writeFile('./dist/uppy.min.css', postCSSResult.css, function (err) {
+            if (err) handleErr(err)
+            console.info(chalk.green('✓ Minified Bundle CSS:'), chalk.magenta('uppy.min.css'))
+            resolve()
+          })
+        })
     })
-})
+  })
+}
+
+function compileCSS () {
+  return new Promise(function (resolve) {
+    sass.render({file: './src/scss/uppy.scss'}, function (err, sassResult) {
+      if (err) handleErr(err)
+      postcss([ autoprefixer ])
+        .process(sassResult.css)
+        .then(function (postCSSResult) {
+          postCSSResult.warnings().forEach(function (warn) {
+            console.warn(warn.toString())
+          })
+          fs.writeFile('./dist/uppy.css', postCSSResult.css, function (err) {
+            if (err) handleErr(err)
+            console.info(chalk.green('✓ Built Uppy CSS:'), chalk.magenta('uppy.css'))
+            resolve()
+          })
+        })
+    })
+  })
+}
+
+compileCSS()
+  .then(minifyCSS)
+  .then(function () {
+    console.info(chalk.yellow('✓ CSS Bundle 🎉'))
+  })

+ 65 - 41
bin/build-js.js

@@ -5,55 +5,79 @@ var chalk = require('chalk')
 var mkdirp = require('mkdirp')
 var glob = require('glob')
 var browserify = require('browserify')
-// var rollupify = require('rollupify')
+var exec = require('child_process').exec
+var exorcist = require('exorcist')
 
-mkdirp.sync('./dist/')
+var distPath = './dist'
+var srcPath = './src'
 
 function handleErr (err) {
   console.error(chalk.red('✗ Error:'), chalk.red(err.message))
 }
 
-function buildUppyBundle () {
-  browserify('./src/index.js', { debug: true, standalone: 'Uppy' })
-    .plugin('minifyify', {
-      map: 'uppy.js.map',
-      output: './dist/uppy.js.map'
-    })
-    // .transform(rollupify)
-    .transform(babelify)
-    .on('error', handleErr)
-    .bundle()
-    // .pipe(exorcist('./dist/uppy.js.map'))
-    .pipe(fs.createWriteStream('./dist/uppy.min.js', 'utf8'))
-    .on('error', handleErr)
-    .on('finish', function () {
-      console.info(chalk.green('✓ Built Uppy bundle:'), chalk.magenta('uppy.min.js'))
-    })
-}
+function buildUppyBundle (minify) {
+  var src = path.join(srcPath, 'index.js')
+  var bundleFile = minify ? 'uppy.min.js' : 'uppy.js'
 
-function buildUppyLocales () {
-  mkdirp.sync('./dist/locales')
-  glob('./src/locales/*.js', function (err, files) {
-    if (err) console.log(err)
-    files.forEach(function (file) {
-      var fileName = path.basename(file, '.js')
-      browserify(file, { debug: true })
-        .plugin('minifyify', {
-          map: fileName + '.min.js.map',
-          output: './dist/locales/' + fileName + '.min.js.map'
-        })
-        // .transform(rollupify)
-        .transform(babelify)
-        .on('error', handleErr)
-        .bundle()
-        .pipe(fs.createWriteStream('./dist/locales/' + fileName + '.min.js', 'utf8'))
-        .on('error', handleErr)
-        .on('finish', function () {
-          console.info(chalk.green('✓ Built Uppy locale:'), chalk.magenta(fileName + '.min.js'))
-        })
+  var b = browserify(src, { debug: true, standalone: 'Uppy' })
+  if (minify) {
+    b.plugin('minifyify', {
+      map: bundleFile + '.map',
+      output: path.join(distPath, bundleFile + '.map')
     })
+  }
+  b.transform(babelify)
+  b.on('error', handleErr)
+
+  return new Promise(function (resolve, reject) {
+    if (minify) {
+      b.bundle()
+      .pipe(fs.createWriteStream(path.join(distPath, bundleFile), 'utf8'))
+      .on('error', handleErr)
+      .on('finish', function () {
+        console.info(chalk.green('✓ Built Minified Bundle:'), chalk.magenta(bundleFile))
+        resolve()
+      })
+    } else {
+      b.bundle()
+      .pipe(exorcist(path.join(distPath, 'uppy.js.map')))
+      .pipe(fs.createWriteStream(path.join(distPath, bundleFile), 'utf8'))
+      .on('error', handleErr)
+      .on('finish', function () {
+        console.info(chalk.green('✓ Built Bundle:'), chalk.magenta(bundleFile))
+        resolve()
+      })
+    }
   })
 }
 
-buildUppyBundle()
-buildUppyLocales()
+// function buildUppyLocales () {
+//   mkdirp.sync('./dist/locales')
+//   glob('./src/locales/*.js', function (err, files) {
+//     if (err) console.log(err)
+//     files.forEach(function (file) {
+//       var fileName = path.basename(file, '.js')
+//       browserify(file, { debug: true })
+//         .plugin('minifyify', {
+//           map: fileName + '.min.js.map',
+//           output: './dist/locales/' + fileName + '.min.js.map'
+//         })
+//         // .transform(rollupify)
+//         .transform(babelify)
+//         .on('error', handleErr)
+//         .bundle()
+//         .pipe(fs.createWriteStream('./dist/locales/' + fileName + '.min.js', 'utf8'))
+//         .on('error', handleErr)
+//         .on('finish', function () {
+//           console.info(chalk.green('✓ Built Locale:'), chalk.magenta(fileName + '.min.js'))
+//         })
+//     })
+//   })
+// }
+
+mkdirp.sync(distPath)
+
+Promise.all([buildUppyBundle(), buildUppyBundle(true)])
+  .then(function () {
+    console.info(chalk.yellow('✓ JS Bundle 🎉'))
+  })

+ 42 - 0
bin/gzip.js

@@ -0,0 +1,42 @@
+var path = require('path')
+var chalk = require('chalk')
+var glob = require('glob')
+var exec = require('child_process').exec
+
+function handleErr (err) {
+  console.error(chalk.red('✗ Error:'), chalk.red(err.message))
+}
+
+function gzip (file) {
+  return new Promise(function (resolve, reject) {
+    var fileName = path.basename(file)
+    var gzipCommand = 'gzip < ' + file + ' > ' + file + '.gz'
+    exec(gzipCommand, function (error, stdout, stderr) {
+      if (error) {
+        handleErr(error)
+        reject(error)
+        return
+      }
+      console.info(chalk.green('✓ Gzipped: '), chalk.magenta(fileName + '.gz'))
+      resolve()
+    })
+  })
+}
+
+function gzipDist () {
+  return new Promise(function (resolve) {
+    glob('./dist/**/*.*(css|js)', function (err, files) {
+      if (err) console.log(err)
+      var gzipPromises = []
+      files.forEach(function (file) {
+        gzipPromises.push(gzip(file))
+      })
+      return Promise.all(gzipPromises).then(function () {
+        console.info(chalk.yellow('✓ Gzipped everything yo 🎉'))
+        resolve()
+      })
+    })
+  })
+}
+
+gzipDist()

+ 4 - 3
package.json

@@ -11,11 +11,12 @@
   "scripts": {
     "build:bundle": "node ./bin/build-js.js",
     "build:css": "node ./bin/build-css.js",
-    "size": "echo 'JS Size:' && cat ./dist/uppy.min.js | gzip | wc -c && echo 'CSS Size:' && cat ./dist/uppy.min.css | gzip | wc -c",
+    "build:gzip": "node ./bin/gzip.js",
+    "size": "echo 'JS Bundle mingz:' && cat ./dist/uppy.min.js | gzip | wc -c && echo 'CSS Bundle mingz:' && cat ./dist/uppy.min.css | gzip | wc -c",
     "build:bundle:fullpath": "env OUT=uppy-fp.js ./bin/build-bundle --full-paths",
-    "build:js": "npm-run-all --parallel build:bundle build:lib",
+    "build:js": "npm-run-all build:bundle build:lib",
     "build:lib": "babel --version && babel src --source-maps -d lib",
-    "build": "npm-run-all --parallel build:js build:css",
+    "build": "npm-run-all --parallel build:js build:css --serial build:gzip size",
     "clean": "rm -rf lib && rm -rf dist",
     "docs": "cd website && node node_modules/documentation/bin/documentation.js readme ../src/index.js --readme-file=src/api/docs.md --section 'Uppy Core & Plugins' -q --github -c doc-order.json",
     "lint:fix": "eslint src test website/build-examples.js website/update.js website/themes/uppy/source/js/common.js --fix",