Al programar en Node.js y hacer referencia a archivos que se encuentran en algún lugar en relación con su directorio actual, ¿hay alguna razón para usar la __dirnamevariable en lugar de solo una regular ./? He estado usando ./ hasta ahora en mi código y acabo de descubrir la existencia de __dirname, y esencialmente quiero saber si sería inteligente convertir mis ./ a eso, y si es así, ¿por qué sería una idea inteligente? .
498

.se usa en el interiorrequire. La ruta internarequiresiempre es relativa al archivo que contiene la llamada arequire.Respuestas:
La esencia
En Node.js,
__dirnamees siempre el directorio en el que reside el script que se está ejecutando actualmente ( consulte esto ). Así que si ha escrito__dirnameen/d1/d2/myscript.js, el valor sería/d1/d2.Por el contrario,
.le proporciona el directorio desde el que ejecutó elnodecomando en la ventana de su terminal (es decir, su directorio de trabajo) cuando utiliza bibliotecas comopathyfs. Técnicamente, comienza como su directorio de trabajo pero se puede cambiar usandoprocess.chdir().La excepción es cuando usas
.conrequire(). La ruta internarequiresiempre es relativa al archivo que contiene la llamada arequire.Por ejemplo...
Digamos que su estructura de directorio es
y
pathtest.jscontieney lo hace
usted obtiene
Su directorio de trabajo es
/dir1/dir2así que eso es lo que.resuelve. Comopathtest.jsse encuentra en/dir1/dir2eso, eso también se__dirnameresuelve.Sin embargo, si ejecuta el script desde
/dir1usted obtiene
En ese caso, su directorio de trabajo fue
/dir1lo que.resolvió, pero__dirnameaún lo resuelve/dir1/dir2.Usando
.dentrorequire...Si dentro
dir2/pathtest.jstiene unarequirellamada para incluir un archivo dentrodir1, siempre lo haríaporque la ruta dentro
requiresiempre es relativa al archivo en el que lo está llamando. No tiene nada que ver con su directorio de trabajo.fuente
./no siempre es el directorio desde el que se inició el nodo. Comienza de esa manera, pero se puede cambiar a través deprocess.chdir(). Entonces,./siempre es el directorio de trabajo actual, que generalmente es el nodo de directorio desde el que se inició, a menos que su código haya cambiado explícitamente el directorio de trabajo.../someDiralgún script y va a ejecutar el comando desde una carpeta diferente?./se refiere al directorio de trabajo actual, excepto en larequire()función. Cuando se usarequire(), se traduce./al directorio del archivo actual llamado.__dirnamees siempre el directorio del archivo actual.Por ejemplo, con la siguiente estructura de archivos
/home/user/dir/files/config.json/home/user/dir/files/somefile.txt/home/user/dir/dir.jsSi
cdentro/home/user/diry corronode dir.jsobtendréPero cuando ejecuto el mismo script
/home/user/, obtengoUso
./trabajado conrequirepero no parafs.readFileSync. Eso es porquefs.readFileSync, se./traduce en el cwd (en este caso/home/user/). Y/home/user/files/somefile.txtno existe.fuente
/movies, pero dado que mi módulo está en un archivo/custom_modules/,__dirnametrata de tomar la película de,/custom_modules/movies./oprocess.cwd(). ver nodejs.org/api/process.html#process_process_cwd