Tengo un archivo JSON al que quiero acceder a través de la declaración de importación. No quiero exponer el nombre directamente en el código, sino leer el nombre del archivo .env e importarlo.
Aquí hay un fragmento de mi código que funciona importando directamente el archivo. ¿Cómo puedo cambiarlo para poder leer el nombre del archivo desde .env e importar el archivo real?
import keys from 'home/path/account.json'; class SecurityServices { getToken(){ return keys.certs; } }básicamente tengo el archivo env con la ruta y lo importé en mi código mecanografiado.
.env { "keyFile":"inicio/ruta/cuenta.json'" }
Gracias
Usaría algo como https://www.npmjs.com/package/properties-reader
Cargue las propiedades de un archivo usando eso. Póngalo en un objeto, importe ese archivo de objeto y use la propiedad. Por ejemplo
let PropertiesReader = require('properties-reader'); let properties = null; try { debugLog('Looking for ' + os.homedir() + '/app.properties') properties = PropertiesReader(os.homedir() + '/app.properties'); debugLog('Found ' + os.homedir() + '/app.properties') } catch(e) { debugLog(os.homedir() + '/app.properties' + ' not found. Using default properties') }después
const prop = properties.get(name);Si solo desea reemplazar un poco de texto en el momento de la compilación, los paquetes como el resumen son la herramienta para usted. Por ejemplo:
// file.ts import keys from 'home/path/account.json'; // rollup.config.js import replace from '@rollup/plugin-replace'; export default { client: { plugins: [ replace({ 'home/path/account.json': process.env.keyFile })Debería poder lograr algo similar con webpack, gulp y la mayoría de los otros paquetes modernos.
Alternativamente (y mi preferencia), considere hacer una importación dinámica . Tenga en cuenta que esto requiere usar Promises agregando un factor asíncrono a su código:
let _loadedJson: any = null; export async function getJsonFromFile() { if (_loadedJson === null) { // This dynamic import will happen one time, when this is first called. _loadedJson = await import(process.env.keyFile); } // Optionally assert a type at return since dynamic imports resolve to `any`. return _loadedJson as Record<string, any> }Con este enfoque, reduce el tamaño de compilación inicial a costa de tener que trabajar con JSON de forma asíncrona.