tutorial que principiantes para node libro español ejemplos desde comandos cero node.js path relative-path fs

node.js - que - Ruta de escritura relativa del sistema de archivos dentro del módulo



node js tutorial español (1)

Tengo un script ejecutable de nodo / javascript que tiene un booleano de depuración, si se establece en verdadero, se escribirán un par de archivos. Este ejecutable también es módulo de nodo. Dependiendo del directorio de trabajo del usuario que ejecuta el script, parece que la función no puede encontrar el directorio para escribir archivos.

El módulo está estructurado así.

output/ lib/ helpers.js index.js

Mi razonamiento original sería tener el camino.

helper.write = function(data,filename){ if(typeof data !== "string") data = JSON.stringify(data); fs.writeFileSync("./output/"+filename, data); };

Sin embargo, esto funciona cuando se ejecuta el script desde la carpeta node_module

fs.writeFileSync("process.cwd()+"/node_modules/the_module/output/"+filename, data);

Me gusta esto

node ./my_app/node_modules/the_module/index.js

Esto se vuelve aún más confuso si los módulos se usan en otro archivo ejecutable que usa la biblioteca.

node ./my_app/run.js

¿Hay una manera de guardar el archivo independiente de todas estas variables?


Si entiendo la pregunta correctamente, siempre debe escribir en una ruta relativa al script actual. Para obtener el nombre del directorio en el que se encuentra la secuencia de comandos que se está ejecutando actualmente, puede usar __dirname así:

var path = require(''path''); helper.write = function(data,filename){ if(typeof data !== "string") data = JSON.stringify(data); var file = path.join(__dirname, ''output'', filename); fs.writeFileSync(file, data); };

Dicho esto, no creo que sea una buena práctica escribir archivos dentro de su directorio node_modules . Recomiendo que su módulo requiera la ruta completa a un archivo en algún otro lugar del sistema de archivos. Si la persona que llama desea escribir en un directorio de salida en su propio árbol de proyectos, puede usar nuevamente el mismo truco __dirname .