javascript - node - path js
Cómo comprobar si un camino es absoluto o relativo. (6)
Como se comentó en la respuesta de Dystroy, las soluciones propuestas no funcionan si una ruta absoluta no está ya normalizada (por ejemplo, la ruta: ///a//..//b//./
).
Una solución correcta es:
path.resolve(yourPath) === path.normalize(yourPath)
Como Marc Diethelm sugiere en los comentarios, esto todavía tiene algunos problemas, ya que path.resolve
elimina las barras inclinadas mientras que path.normalize
no lo hace.
No estoy seguro de cómo se comportan exactamente estas funciones (como puede leer en los comentarios), de todos modos, el siguiente fragmento de código parece funcionar bien, al menos en entornos Linux:
path.resolve(yourPath) === path.normalize(yourPath).replace( RegExp(path.sep+''$''), '''' );
La ruta absoluta de UNIX comienza con ''/'', mientras que Windows comienza con el alfabeto ''C:'' o ''/'. ¿Tiene node.js una función multiplataforma estándar para verificar si una ruta es absoluta o relativa?
Esto es un poco complicado, pero es la forma más robusta que he encontrado usando solo el módulo de ruta (pre nodo 0.12.0)
function isAbsolute(p) {
return path.normalize(p + ''/'') === path.normalize(path.resolve(p) + ''/'');
}
Se debe tener en cuenta que path.isAbsolute existe desde el nodo 0.12.0 en adelante.
No tengo idea acerca de node.js, pero puede ver la fuente de path.js en github: https://github.com/joyent/node/blob/master/lib/path.js
Puedes ver:
// windows version
exports.isAbsolute = function(path) {
var result = splitDeviceRe.exec(path),
device = result[1] || '''',
isUnc = device && device.charAt(1) !== '':'';
// UNC paths are always absolute
return !!result[2] || isUnc;
};
Y:
// posix version
exports.isAbsolute = function(path) {
return path.charAt(0) === ''/'';
};
Usted podría utilizar
path.resolve(yourPath)===yourPath
Si su ruta no está normalizada, use
path.resolve( yourPath ) == path.normalize( yourPath )
Desde la versión 0.12.0 del nodo, puede utilizar la función path.isAbsolute(path)
del módulo de path .
es decir:
var path = require(''path'');
if(path.isAbsolute(myPath)) {
//...
}
isRelative(url){
return (/^(/.){1,2}(//){1,2}$/.test(url.slice(0,3)) ||
/(//){1,2}(/.){1,2}(//){1,2}/.test(url));
}
Esto facilita la verificación de si una ruta es relativa a pesar de la ausencia de la API del módulo de ruta de nodo.
(/^(/.|~){1,2}(//){1,2}$/.test(url.slice(0,3))
esta parte comprueba si la cadena de ruta comienza con "./" o "../" o "~ /". Si lo hace, devuelve Boolean true. De lo contrario se ejecuta la siguiente prueba.
/(//){1,2}(/.){1,2}(//){1,2}/.test(url)
Esto solo comprueba si la cadena de ruta tiene "/./" o "/../". y devuelve verdadero en cualquiera y falso en ninguno.
Si cualquiera de las dos pruebas es verdadera, entonces la cadena de ruta es relativa.
Para ventanas.
isRelative(url){
return (/^(/.){1,2}(//){1,2}$/.test(url.slice(0,3)) ||
/(//){1,2}(/.){1,2}(//){1,2}/.test(url));
}