Descripción del método:
Versión síncrona de Fs.RealPath ().
gramática:
La copia del código es la siguiente:
fs.RealpathSync (ruta, [caché])
Dado que este método pertenece al módulo FS, es necesario introducir el módulo FS antes de usar (var fs = require ("fs")))
Recibir parámetros:
camino
Cache opcionalmente, se puede usar una ruta mapeada literal para forzar una ruta específica para resolver o evitar que FS.Stat sea para conocer el objeto de ruta real.
ejemplo:
La copia del código es la siguiente:
var fs = require ('fs');
// El punto indica la ruta del archivo actual
var str = fsalpathsync ('.');
console.log (str);
Código fuente:
La copia del código es la siguiente:
fs.RealPathSyc = function realPathSync (p, caché) {
// hacer p es absoluto
p = PathModule.resolve (P);
if (cache && object.prototype.hasownproperty.call (cache, p)) {
return cache [p];
}
var original = p,
seelinks = {},
conoceHard = {};
// Posición actual del personaje en P
var pos;
// El camino parcial hasta ahora, incluida una barra de corte, si es que hay alguno
VAR Corriente;
// El camino parcial sin una barra de arrastre (excepto cuando apunta a una raíz)
base var;
// El camino parcial escaneó en la ronda anterior, con Slash
var anterior;
comenzar();
función start () {
// omita las raíces
var m = splitrootre.exec (p);
pos = m [0] .length;
corriente = m [0];
base = m [0];
anterior = '';
// En Windows, verifique que exista la raíz. En Unix no hay necesidad.
if (iswindows &&! conoceHard [base]) {
fs.lstatsync (base);
conocidoHard [base] = verdadero;
}
}
// Camina por el camino, cambiando PathParts vinculados por su real
// valores
// nb: p.length cambia.
while (pos <p.length) {
// Encuentra la siguiente parte
nextpartre.lastIndex = pos;
resultado var = nextpartre.exec (p);
anterior = corriente;
corriente += resultado [0];
base = anterior + resultado [1];
pos = nextpartre.lastIndex;
// Continuar si no es un enlace simbólico
if (conoceHard [base] || (caché && cache [base] === base)) {
continuar;
}
var resueldlink;
if (cache && object.prototype.hasownproperty.call (cache, base)) {
// algún enlace simbólico conocido. No hay necesidad de estadísticas nuevamente.
resuelveLink = cache [base];
} demás {
var stat = fs.lstatSync (base);
if (! stat.issymboliclink ()) {
conocidoHard [base] = verdadero;
if (caché) caché [base] = base;
continuar;
}
// Lea el enlace si no se leyó antes
// dev/ino siempre devuelve 0 en las ventanas, así que omita el cheque.
var linkTarget = null;
if (! iswindows) {
var id = stat.dev.toString (32) + ':' + stat.ino.ToString (32);
if (SeenLinks.HasownProperty (id)) {
linkTarget = SeenLinks [id];
}
}
if (util.isnull (linkTarget)) {
fs.statsync (base);
linkTarget = fs.ReadLinkSync (base);
}
resuelveLink = pathmodule.resolve (anterior, linkTarget);
// rastrear esto, si se le da un caché.
if (cache) cache [base] = resuelveLink;
if (! iswindows) seelinks [id] = linkTarget;
}
// Resolver el enlace, luego comenzar de nuevo
p = PathModule.resolve (resuelveLink, p.slice (pos));
comenzar();
}
if (caché) caché [original] = p;
regreso p;
};