Con el nodo, transpilo un archivo tsx mecanografiado int javascript. Luego necesito llamar a una función que se describe en ese código javascript. Se utilizan módulos ES6.
yo suelo
writeFileSync('./temp/page1.js', js) // js is the module source code import page from '../temp/page1.js'La página está aquí la exportación predeterminada, que es una función a la que quiero llamar.
Eso funciona bien, pero me pregunto si hay una mejor manera de llamar a la función dentro del código fuente del módulo. Una forma que evita guardar el código fuente en un archivo temporal.
eval no sería un problema de seguridad, pero creo que no me daría la exportación predeterminada, los módulos no se consideran en esta función anterior.
¿Quizás algo relacionado con el nodo?
Encontré https://www.npmjs.com/package/node-eval que evitaría guardar el archivo, aunque todavía requiere un nombre de archivo, lo que causa cierta fragilidad en mi código.
nodo:módulo nodo:vm
son quizás prometedores, mirando https://github.com/node-eval/node-eval/blob/master/index.js pero aún no he descubierto si y cómo.
Similar, pero más relacionado con require: Cargue el módulo node.js desde una cadena en la memoria
https://github.com/floatdrop/require-from-string tampoco funcionó
todas las variantes con node:vm like
import vm from 'node:vm' let context = vm.createContext({}, {name:"temp1.mjs"}) vm.runInContext(js, context, {filename: "temp2.mjs"})resultado en "No se puede usar la declaración de importación fuera de un módulo"
La mejor manera sería la clase de nodos vm.Module
https://nodejs.org/api/vm.html#vm_module_evaluate_options
pero eso está en la etapa de borrador y detrás de las banderas de características.