Pregunta ¿Cómo obtengo la ruta al script actual con Node.js?


¿Cómo obtendría la ruta al script en Node.js?

Sé que hay process.cwd, pero eso solo se refiere al directorio donde se llamó el script, no del script en sí. Por ejemplo, decir que estoy en /home/kyle/ y ejecuto el siguiente comando:

node /home/kyle/some/dir/file.js

Si llamo process.cwd(), Yo obtengo /home/kyle/no /home/kyle/some/dir/. ¿Hay alguna forma de obtener ese directorio?


712
2018-06-28 14:31


origen


Respuestas:


Lo encontré después de revisar la documentación nuevamente. Lo que estaba buscando era el __filename y __dirname variables a nivel de módulo


1012
2018-06-28 14:39



Entonces, básicamente, puedes hacer esto:

fs.readFile(path.resolve(__dirname, 'settings.json'), 'UTF-8', callback);

Use resolve () en lugar de concatenar con '/' o '\' else, se encontrará con problemas multiplataforma.

Nota: __dirname es la ruta local del módulo o secuencia de comandos incluida. Si está escribiendo un complemento que necesita conocer la ruta del script principal, es:

require.main.filename

o, simplemente para obtener el nombre de la carpeta:

require('path').dirname(require.main.filename)

187
2017-09-08 18:40



Este comando devuelve el directorio actual:

var currentPath = process.cwd();

Por ejemplo, para usar la ruta para leer el archivo:

var fs = require('fs');
fs.readFile(process.cwd() + "\\text.txt", function(err, data)
{
    if(err)
        console.log(err)
    else
        console.log(data.toString());
});

51
2017-10-23 07:17



Use __dirname !!

__dirname

El nombre del directorio del módulo actual. Esto es lo mismo que path.dirname () del __filename.

Ejemplo: ejecución del nodo example.js desde / Users / mjr

console.log(__dirname);
// Prints: /Users/mjr
console.log(path.dirname(__filename));
// Prints: /Users/mjr

https://nodejs.org/api/modules.html#modules_dirname


38
2017-12-22 14:30



Cuando se trata del guión principal, es tan simple como:

process.argv[1]

Desde el Documentación de Node.js:

process.argv

Una matriz que contiene los argumentos de la línea de comando. El primer elemento será 'nodo', el segundo elemento será la ruta al archivo JavaScript. Los siguientes elementos serán cualquier argumento de línea de comando adicional.

Si necesita saber la ruta de un archivo de módulo, use __nombre del archivo.


34
2017-12-17 10:41



var settings = 
    JSON.parse(
        require('fs').readFileSync(
            require('path').resolve(
                __dirname, 
                'settings.json'),
            'utf8'));

26
2017-11-05 05:41



Cada programa Node.js tiene algunas variables globales en su entorno, lo que representa cierta información sobre su proceso y una de ellas es __dirname.


24
2018-05-25 21:27



Puede usar process.env.PWD para obtener la ruta actual de la carpeta de la aplicación.


9
2017-09-28 07:00



Sé que esto es bastante antiguo, y la pregunta original a la que respondía está marcada como duplicada y dirigida aquí, pero me encontré con un problema al tratar de hacer trabajar a los reporteros de jazmín y no me gustó la idea de tener que degradarme en para que funcione Descubrí que los reporteros de jazmín no estaban resolviendo savePath correctamente y en realidad estaba publicando la carpeta de informes en el directorio jazmín-reporters en lugar del directorio raíz de donde ejecuté gulp. Para hacer que esto funcione correctamente, terminé usando process.env.INIT_CWD para obtener el Directorio de trabajo actual inicial, que debería ser el directorio donde ejecutó el trago. Espero que esto ayude a alguien.

var reporters = require('jasmine-reporters');
var junitReporter = new reporters.JUnitXmlReporter({
  savePath: process.env.INIT_CWD + '/report/e2e/',
  consolidateAll: true,
  captureStdout: true
});


7
2018-03-15 15:37



Node.js 10 soportes Módulos ECMAScript, dónde __dirname y __filename no están disponibles fuera de la caja.

Luego, para obtener la ruta al módulo ES actual, debe usar:

const __filename = new URL(import.meta.url).pathname;

Y para el directorio que contiene el módulo actual:

import path from 'path';

const __dirname = path.dirname(new URL(import.meta.url).pathname);

5
2018-04-27 01:01