Solución:
Aunque el código de la respuesta funciona, debes usar path.basename()
para obtener el nombre de la última parte de una ruta porque:
- Funciona en todos los sistemas operativos (Windows y los sistemas tipo Unix usan diferentes separadores de ruta)
- Ignora los separadores de directorios finales (es decir, el último
/
en/path/to/cwd/
)
Además, y para mayor seguridad, debe utilizar path.resolve()
porque normaliza la ruta antes de obtener el nombre base, eliminando las peculiaridades relacionadas con la ruta.
Si puedes conseguir el /path/to/cwd
con process.cwd()
, entonces lo siguiente le dará el nombre del directorio ("cwd"
en el ejemplo):
path.basename(process.cwd())
Agregar path.resolve()
para mayor seguridad:
path.basename(path.resolve(process.cwd()))
o incluso:
path.basename(path.resolve())
Ejemplo:
const path = require('path');
function slice(pathName) {
const res = pathName.split(path.sep).slice(-1)[0];
console.log('slicer ', pathName, '=>', `'${res}'`);
}
function basename(pathName) {
const res = path.basename(path.resolve(pathName));
console.log('basename', pathName, '=>', `'${res}'`);
}
slice('/path/to/cwd'); // cwd
basename('/path/to/cwd'); // cwd
slice('/path/to/cwd/'); // ''
basename('/path/to/cwd/'); // cwd
// Other valid paths
slice('/path/to/cwd/..'); // '..'
basename('path/to/cwd/..'); // cwd
slice('.'); // '.'
basename('.'); // <current directory name>
process.cwd ()
Returns: <string>
El método process.cwd () devuelve el directorio de trabajo actual del proceso Node.js.
console.log(`Current directory: ${process.cwd()}`);
Este es garantizado para ser la ruta absoluta al directorio de trabajo actual. ¡Utilizar esta!
path.basename (ruta[, ext])
path <string>
ext <string> An optional file extension
Returns: <string>
los
path.basename()
El método devuelve la última parte de una ruta, similar al comando de nombre de base de Unix. Los separadores de directorios finales se ignoran, consulte path.sep.path.basename('/foo/bar/baz/asdf/quux.html'); // Returns: 'quux.html' path.basename('/foo/bar/baz/asdf/quux.html', '.html'); // Returns: 'quux'
Se lanza un TypeError si la ruta no es una cadena o si se proporciona ext y no es una cadena.
path.resolve[…paths])
...paths <string> A sequence of paths or path segments Returns: <string>
El método path.resolve () resuelve una secuencia de rutas o segmentos de ruta en una ruta absoluta.
La secuencia de rutas dada se procesa de derecha a izquierda, con cada ruta subsiguiente antepuesta hasta que se construye una ruta absoluta. Por ejemplo, dada la secuencia de segmentos de ruta: / foo, / bar, baz, llamar a path.resolve (‘/ foo’, ‘/ bar’, ‘baz’) devolvería / bar / baz.
Si después de procesar todos los segmentos de ruta dados aún no se ha generado una ruta absoluta, se utiliza el directorio de trabajo actual.
La ruta resultante se normaliza y las barras diagonales finales se eliminan a menos que la ruta se resuelva en el directorio raíz.
Los segmentos de trayectoria de longitud cero se ignoran.
Si no se pasan segmentos de ruta, path.resolve () devolverá la ruta absoluta del directorio de trabajo actual.
Si puedes usar process.cwd()
no necesitas path.resolve()
en otros casos, ¡úsala !.
Está buscando path.basename:
const path = require('path');
path.basename(CWD)
El método path.basename () devuelve la última parte de una ruta. Los separadores de directorios finales se ignoran.