Node.js en sí no proporciona una API para copiar directamente archivos. Si desea copiar archivos o directorios con Node.js, debe usar otras API para implementarlo. Puede usar ReadFile y WriteFile directamente para copiar un solo archivo, lo cual es más fácil. Si copia todos los archivos en un directorio, y el directorio también puede contener subdirectorios, entonces debe usar una API más avanzada.
fluir
Las transmisiones son la forma en que node.js mueve datos. Las secuencias en Node.js son legibles/escritos, y tanto los módulos HTTP como los del sistema de archivos usan transmisiones. En el sistema de archivos, cuando se usa transmisiones para leer archivos, un archivo grande puede no leerse a la vez, pero se lee varias veces. Al leer, responderá a los eventos de datos. Puede operar en los datos de lectura antes de leer el archivo. Del mismo modo, al escribir en una transmisión, los archivos grandes no se escriben a la vez, al igual que cuando se lee. Esta forma de mover datos es muy eficiente, especialmente para archivos grandes. El uso de transmisiones es mucho más rápido que esperar que se lean todos los archivos grandes antes de operar los archivos.
tubería
Si desea tener un control completo al leer y escribir transmisiones, puede usar eventos de datos. Pero para la replicación simple de archivos, las transmisiones de lectura y las secuencias de escritura pueden transferir datos a través de tuberías.
Aplicación práctica:
La copia del código es la siguiente:
var fs = require ('fs'),
stat = fs.stat;
/*
* Copiar todos los archivos en el directorio, incluidos los subdirectorios
* @param {String} Directorio que debe copiarse
* @param {string} copia al directorio especificado
*/
var copy = function (src, dst) {
// Lea todos los archivos/directorios en el directorio
fs.ReadDir (src, function (err, rutas) {
if (err) {
tirar err;
}
raths.foreach (función (ruta) {
var _src = src + '/' + ruta,
_dst = dst + '/' + ruta,
legible, escritos;
stat (_src, function (err, st) {
if (err) {
tirar err;
}
// Determinar si es un archivo
if (St.Isfile ()) {
// Crear una transmisión de lectura
leeable = fs.CreateReadStream (_src);
// crear una transmisión de escritura
writable = fs.CreatewriteReam (_dst);
// transferir corrientes a través de tuberías
legible.pipe (WRITITY);
}
// Si es un directorio, llame a sí mismo recursivamente
else if (St.isDirectory ()) {
existe (_src, _dst, copiar);
}
});
});
});
};
// Antes de copiar el directorio, debe determinar si existe el directorio. Si no existe, primero debe crear un directorio.
var existe = function (src, dst, llamado) {
fs.exists (dst, function (existe) {
// ya existe
if (existe) {
devolución de llamada (SRC, DST);
}
// no existe
demás{
fs.mkdir (dst, function () {
devolución de llamada (SRC, DST);
});
}
});
};
// Copiar el directorio
existe ('./src', './build', copia);