Estoy practicando con mecanografiado y quiero escribir un archivo usando el módulo fs, pero no sé si es una pregunta de novato o si estoy haciendo algo mal, pero mi proyecto se ve así:
raíz
-> dir (aquí está el resultado js de tsc)
-> origen
--> datos
---> datos.json
--> servicio
---> servicio.ts
--> índice.ts
-> paquete.json
-> tsconfig.json
Y en service.ts aparentemente la ruta es: let filePath = path.join('./','src','data','data.json') // this works
fs.writeFile(filePath, JSON.stringify(data,null,2), 'utf8', (err)=>{ if(err){ return console.log(err);}})
Entonces no sé por qué la ruta se coloca en el nivel raíz
Si pruebo "../data/data.json" obtengo ENOENT ERROR sin tal archivo o directorio
¿Está bien?
Las operaciones del sistema de archivos con rutas relativas siempre usan el directorio de trabajo actual, un concepto que se explica aquí: https://en.m.wikipedia.org/wiki/Working_directory
Cuando ejecuta Node.js, lo hace mientras se encuentra en un directorio en particular. Por ejemplo, los scripts como npm start generalmente se ejecutan en el directorio de nivel raíz de un repositorio/proyecto; esto hace que todas las rutas relativas se resuelvan a partir de ahí. Tenga en cuenta, sin embargo, que esto puede ser diferente en producción: es posible que Docker, PM2, systemd o cualquier otra herramienta ejecute su secuencia de comandos mientras se encuentra en un directorio de trabajo diferente (esto a menudo se puede configurar).
Para inspeccionar su directorio de trabajo actual en Node.js, use https://nodejs.org/api/process.html#processcwd
También es posible crear rutas relativas al directorio del archivo JS. Este tutorial muestra varios ejemplos sobre cómo hacerlo: https://www.digitalocean.com/community/tutorials/nodejs-how-to-use__dirname
Es importante recordar que require() usa rutas relativas a __dirname, pero fs se resuelve en relación con CWD.