diff --git a/lib/copy/ncp.js b/lib/copy/ncp.js index 9670ee02..5007839a 100644 --- a/lib/copy/ncp.js +++ b/lib/copy/ncp.js @@ -96,30 +96,34 @@ function ncp (source, dest, options, callback) { function copyFile (file, target) { var readStream = fs.createReadStream(file.name) - var writeStream = fs.createWriteStream(target, { mode: file.mode }) readStream.on('error', onError) - writeStream.on('error', onError) - if (transform) { - transform(readStream, writeStream, file) - } else { - writeStream.on('open', function () { - readStream.pipe(writeStream) - }) - } + readStream.once('open', function () { + var writeStream = fs.createWriteStream(target, { mode: file.mode }) - writeStream.once('close', function () { - fs.chmod(target, file.mode, function (err) { - if (err) return onError(err) - if (preserveTimestamps) { - utimes.utimesMillis(target, file.atime, file.mtime, function (err) { - if (err) return onError(err) - return doneOne() - }) - } else { - doneOne() - } + writeStream.on('error', onError) + + if (transform) { + transform(readStream, writeStream, file) + } else { + writeStream.on('open', function () { + readStream.pipe(writeStream) + }) + } + + writeStream.once('close', function () { + fs.chmod(target, file.mode, function (err) { + if (err) return onError(err) + if (preserveTimestamps) { + utimes.utimesMillis(target, file.atime, file.mtime, function (err) { + if (err) return onError(err) + return doneOne() + }) + } else { + doneOne() + } + }) }) }) }