首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >浏览器中TypeScript的动态执行

浏览器中TypeScript的动态执行
EN

Stack Overflow用户
提问于 2017-09-05 16:09:23
回答 1查看 1.9K关注 0票数 3

我有一个TypeScript,它异步下载另一个类型记录/javascript模块:

代码语言:javascript
运行
复制
(function (exports) {
    "use strict";

    var path = require('path');

    exports.convertData = function (data) {
        return "converted " + data;
    }

})(typeof exports === 'undefined' ? this['converter.someConverter'] = {} : exports);

在执行我的主应用程序时,我会以字符串的形式接收这个模块,我必须从那里使用函数convertData

所以,我在尝试以下几点:

代码语言:javascript
运行
复制
eval(rendererScript);
console.log(exports.convertData("some data"));

只有当var path = require('path');将被删除时,它才能正常工作。否则,以下错误:Uncaught (承诺)错误:模块名"path“尚未为上下文加载:_。使用要求([])

问题:

  1. 在这种情况下,使用eval()可以吗?(正如我们所知,伊娃是邪恶的)
  2. 如何与require('path')?在一起我正在尝试使用RequireJS (http://requirejs.org/docs/node.html#2),但是收到了以下错误:Uncaught:"path"的脚本错误

编辑的

因此,为了避免eval(),找到了以下解决方案:

代码语言:javascript
运行
复制
const scriptTag = document.createElement("script");
scriptTag.innerHTML = rendererScript;
document.body.appendChild(scriptTag);
this.m_rendererPlugin = (window as any)[`converter.someConverter`];
EN

回答 1

Stack Overflow用户

发布于 2018-10-25 03:52:24

因为在您的示例中,输入代码是动态的,所以您需要在运行时编译,很可能使用TypeScript编译器API。在没有专用服务器的情况下,仍然可以使用TypeScript编译器API https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API在浏览器中编译TS项目。

对于transpiling,您不必做任何事情,只需在html中包含node_modules/typescript/ypescript.js,就可以完成了。但是对于更复杂的API,如类型检查和语言服务API (https://github.com/Microsoft/TypeScript/wiki/Writing-a-Language-Service-Plugin),您需要实现一些接口。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46059313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档