previous not nodejs node __dirname node.js

node.js - not - nodo__dirname no definido



path node js (6)

Aunque no es la solución a este problema, me gustaría agregarlo ya que puede ayudar a otros.

Debería tener dos guiones bajos antes del nombre dir, no una línea inferior ( __dirname no _dirname).

http://nodejs.org/docs/latest/api/globals.html#globals_dirname

Del manual del nodo veo que puedo obtener el directorio de un archivo con __dirname , pero desde el REPL esto parece estar indefinido. ¿Es esto un malentendido de mi parte o dónde está el error?

$ node > console.log(__dirname) ReferenceError: __dirname is not defined at repl:1:14 at REPLServer.eval (repl.js:80:21) at Interface.<anonymous> (repl.js:182:12) at Interface.emit (events.js:67:17) at Interface._onLine (readline.js:162:10) at Interface._line (readline.js:426:8) at Interface._ttyWrite (readline.js:603:14) at ReadStream.<anonymous> (readline.js:82:12) at ReadStream.emit (events.js:88:20) at ReadStream._emitKey (tty.js:320:10)


Como dijo @qiao, no puedes usar __dirname en el nodo repl. Sin embargo, si necesita este valor en la consola, puede usar path.resolve() o path.dirname() . Aunque, path.dirname() solo le dará un "." entonces, probablemente no tan útil. Asegúrese de require(''path'') .


Estaba ejecutando una secuencia de comandos del archivo por lotes como usuario del sistema y todas las variables como process.cwd() , path.resolve() y todos los demás métodos me daría una ruta a la carpeta C: / Windows / System32 en lugar de la ruta real. Durante los experimentos, noté que cuando se produce un error, la pila contiene una ruta real al archivo de nodo.

Aquí hay una forma muy rara de obtener un verdadero camino desencadenando un error y extrayendo la ruta de e.stack. No utilice.

// this should be the name of currently executed file const currentFilename = ''index.js''; function veryHackyGetFolder() { try { throw new Error(); } catch(e) { const fullMsg = e.stack.toString(); const beginning = fullMsg.indexOf(''file:///'') + 8; const end = fullMsg.indexOf(''//'' + currentFilename); const dir = fullMsg.substr(beginning, end - beginning).replace(////g, ''//'); return dir; } }

Uso

const dir = veryHackyGetFolder();


Parece que también podrías hacer esto:

__dirname=fs.realpathSync(''.'');

por supuesto, no olvides fs=require(''fs'')

(no es realmente global en las secuencias de comandos de nodo exactamente, solo se define en el nivel de módulo)



__dirname solo se define en los scripts. No está disponible en REPL.

intente hacer un script a.js

console.log(__dirname);

y ejecutarlo:

node a.js

verá __dirname impreso.

Explicación de fondo __dirname : __dirname significa ''El directorio de este script''. En REPL, no tienes un script. Por lo tanto, __dirname no tendría ningún significado real.