tengo el siguiente archivo:
import {something} from '../../something'; something.do(); Y quiero obtener la ruta relativa de something como una cadena, pero de forma dinámica en lugar de escribirla implícitamente. Algo como esto:
import {something} from '../../something'; getPath(something); // will return '../../something' something.do();¿Cuáles son mis opciones? ¿Es posible?
Puede obtener una ruta relativa a un archivo importado de la siguiente manera
PRIMERA APROXIMACIÓN : (se modifica el archivo importado):
test . Dentro de la carpeta de test , tiene los archivos test1.js y /mod/test2.js .prueba/mod/prueba2.js
// here are some of your codes export const importedFilePath = import.meta.url; // export current file absoulte pathtest/test1.js :El método path.relative(from, to) devuelve la ruta relativa de a a según el directorio de trabajo actual. Si from y to se resuelven en la misma ruta (después de llamar a path.resolve() en cada uno), se devuelve una cadena de longitud cero.
Si se pasa una cadena de longitud cero como desde o hacia, se utilizará el directorio de trabajo actual en lugar de las cadenas de longitud cero. Documentación
import path from 'path' import { importedFilePath } from './mod/test2.js'; const currentFilePath = import.meta.url; console.log(path.relative(currentFilePath, importedFilePath));Producción:
..\mod\test2.js Ahora tiene la ruta relativa from test/test1.js a test/mod/test2.js
Sé que esta no es una solución perfecta, pero puede lograr el resultado que desea utilizando el enfoque anterior.
SEGUNDO ENFOQUE
Si estuviera utilizando el sistema de módulos CommonJS, puede lograr este resultado sin modificar el archivo importado.
Suponga que usa el módulo CommonJS. Sin ninguna modificación en el archivo importado, puede lograr el mismo resultado que el anterior de la siguiente manera:
archivo test/test1.js :
const file = require('./mod/test2'); const path = require('path'); const importedFilePath=require.cache[__filename].children[0].id; //this returns imported file path const currentFilePath = __filename; console.log(path.relative(currentFilePath, importedFilePath));Y salida:
..\mod\test2.js