Ejecución dinámica de TypeScript en el navegador
Tengo TypeScript que descarga asincrónicamente otro módulo TypeScript / javascript:
(function (exports) {
"use strict";
var path = require('path');
exports.convertData = function (data) {
return "converted " + data;
}
})(typeof exports === 'undefined' ? this['converter.someConverter'] = {} : exports);
Durante la ejecución de mi aplicación principal, recibo este módulo como cadena y tengo que usar la funciónconvertData desde allí.
Entonces, estoy intentando lo siguiente:
eval(rendererScript);
console.log(exports.convertData("some data"));
Funciona bien solo en caso de quevar ruta = require ('ruta'); será eliminado De lo contrario, el siguiente error:Error no detectado (en promesa): el nombre del módulo "ruta" aún no se ha cargado para el contexto: _. El uso requiere ([])
Preguntas:
¿Está bien usar eval () en este caso? (como sabemos eval es malvado)Como estar conrequire ('ruta')? Estoy tratando de usarRequireJS (http://requirejs.org/docs/node.html#2) pero recibe el siguiente error:Error no detectado: error de script para "ruta"Editado
Entonces, para evitar eval () se encontró la siguiente solución:
const scriptTag = document.createElement("script");
scriptTag.innerHTML = rendererScript;
document.body.appendChild(scriptTag);
this.m_rendererPlugin = (window as any)[`converter.someConverter`];