pack-dir.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. 'use strict'
  2. const BB = require('bluebird')
  3. const cacache = require('cacache')
  4. const cacheKey = require('./cache-key')
  5. const optCheck = require('./opt-check')
  6. const packlist = require('npm-packlist')
  7. const pipe = BB.promisify(require('mississippi').pipe)
  8. const tar = require('tar')
  9. module.exports = packDir
  10. function packDir (manifest, label, dir, target, opts) {
  11. opts = optCheck(opts)
  12. const packer = opts.dirPacker
  13. ? BB.resolve(opts.dirPacker(manifest, dir))
  14. : mkPacker(dir)
  15. if (!opts.cache) {
  16. return packer.then(packer => pipe(packer, target))
  17. } else {
  18. const cacher = cacache.put.stream(
  19. opts.cache, cacheKey('packed-dir', label), opts
  20. ).on('integrity', i => {
  21. target.emit('integrity', i)
  22. })
  23. return packer.then(packer => BB.all([
  24. pipe(packer, cacher),
  25. pipe(packer, target)
  26. ]))
  27. }
  28. }
  29. function mkPacker (dir) {
  30. return packlist({ path: dir }).then(files => {
  31. return tar.c({
  32. cwd: dir,
  33. gzip: true,
  34. portable: true,
  35. prefix: 'package/'
  36. }, files)
  37. })
  38. }