Descrição do método:
Versão síncrona do fs.realPath ().
gramática:
A cópia do código é a seguinte:
fs.realpathsync (caminho, [cache])
Como esse método pertence ao módulo FS, é necessário introduzir o módulo FS antes do uso (var fs = requer ("fs")))
Receber parâmetros:
caminho do caminho
Opcionalmente do cache, um caminho mapeado literal pode ser usado para forçar um caminho específico para resolver ou evitar o F.Stat adicional precisa conhecer o objeto de caminho real.
exemplo:
A cópia do código é a seguinte:
var fs = requer ('fs');
// o ponto indica o caminho do arquivo atual
var str = fs.realPathSync ('.');
console.log (str);
Código -fonte:
A cópia do código é a seguinte:
fs.realpathsync = função realpathsync (p, cache) {
// make p é absoluto
p = pathmodule.resolve (p);
if (cache && object.prototype.hasownproperty.call (cache, p)) {
Retornar Cache [P];
}
var original = p,
Seelinks = {},
conhecidohard = {};
// posição atual do caractere em p
var pos;
// o caminho parcial até agora, incluindo uma barra de arco, se houver
Var Current;
// O caminho parcial sem uma barra de direita (exceto quando apontando para uma raiz)
var base;
// O caminho parcial digitalizado na rodada anterior, com barra
var anterior;
começar();
função start () {
// pula sobre raízes
var m = splitrootre.exec (p);
pos = m [0] .Length;
corrente = m [0];
base = m [0];
anterior = '';
// No Windows, verifique se a raiz existe. No Unix, não há necessidade.
if (iswindows &&! conhecidohard [base]) {
fs.lstatsync (base);
conhecidohard [base] = true;
}
}
// Ande pelo caminho, trocando o caminho vinculado
// valores
// NB: P. comprimento muda.
while (pos <p.Length) {
// Encontre a próxima parte
nextpartre.LastIndex = POS;
var resultado = nextPartre.exec (p);
anterior = atual;
corrente += resultado [0];
base = resultado anterior + [1];
pos = nextPartre.LastIndex;
// Continue, se não um symblink
if (conhecidohard [base] || (cache && cache [base] === base)) {
continuar;
}
var resolvido link;
if (cache && object.prototype.hasownproperty.call (cache, base)) {
// Algum link simbólico conhecido. Não há necessidade de estatística novamente.
ResolvedLink = cache [base];
} outro {
var stat = fs.lstatsync (base);
if (! stat.issymbolicLink ()) {
conhecidohard [base] = true;
if (cache) cache [base] = base;
continuar;
}
// Leia o link se não foi lido antes
// dev/ino sempre retorna 0 no Windows, então pule o cheque.
var linkTarget = null;
if (! iswindows) {
var id = stat.dev.toString (32) + ':' + stat.ino.toString (32);
if (seredlinks.HasownProperty (id)) {
linkTarget = SAILLINKS [ID];
}
}
if (util.isnull (linkTarget)) {
fs.statsync (base);
linkTarget = fs.readlinksync (base);
}
ResolvedLink = PathModule.Resolve (anterior, LinkTarget);
// Acompanhe isso, se receber um cache.
if (cache) cache [base] = resolvidolink;
if (! iswindows) seelinks [id] = linkTarget;
}
// Resolva o link e comece de novo
p = pathmodule.Resolve (resolvedlink, p.slice (pos));
começar();
}
if (cache) cache [original] = p;
retornar p;
};