copy.js 948 B

12345678910111213141516171819202122232425262728293031323334353637
  1. var fs = require('graceful-fs')
  2. var path = require('path')
  3. var ncp = require('./ncp')
  4. var mkdir = require('../mkdirs')
  5. function copy (src, dest, options, callback) {
  6. if (typeof options === 'function' && !callback) {
  7. callback = options
  8. options = {}
  9. } else if (typeof options === 'function' || options instanceof RegExp) {
  10. options = {filter: options}
  11. }
  12. callback = callback || function () {}
  13. fs.lstat(src, function (err, stats) {
  14. if (err) return callback(err)
  15. var dir = null
  16. if (stats.isDirectory()) {
  17. var parts = dest.split(path.sep)
  18. parts.pop()
  19. dir = parts.join(path.sep)
  20. } else {
  21. dir = path.dirname(dest)
  22. }
  23. fs.exists(dir, function (dirExists) {
  24. if (dirExists) return ncp(src, dest, options, callback)
  25. mkdir.mkdirs(dir, function (err) {
  26. if (err) return callback(err)
  27. ncp(src, dest, options, callback)
  28. })
  29. })
  30. })
  31. }
  32. module.exports = copy