【发布时间】:2018-10-25 12:03:17
【问题描述】:
我有异步下载另一个 TypeScript/javascript 模块的 TypeScript:
(function (exports) {
"use strict";
var path = require('path');
exports.convertData = function (data) {
return "converted " + data;
}
})(typeof exports === 'undefined' ? this['converter.someConverter'] = {} : exports);
在我的主应用程序执行期间,我将此模块作为字符串接收,我必须从那里使用函数 convertData。
所以,我正在尝试以下方法:
eval(rendererScript);
console.log(exports.convertData("some data"));
只有在 var path = require('path'); 将被删除的情况下才能正常工作。否则会出现以下错误: 未捕获(承诺中)错误:尚未为上下文加载模块名称“路径”:_。使用 require([])
问题:
- 在这种情况下可以使用 eval() 吗? (我们知道 eval 是邪恶的)
- 如何与require('path')?我正在尝试使用 RequireJS (http://requirejs.org/docs/node.html#2) 但收到以下错误:未捕获的错误:“路径”的脚本错误
已编辑
所以,为了避免 eval() 找到了以下解决方案:
const scriptTag = document.createElement("script");
scriptTag.innerHTML = rendererScript;
document.body.appendChild(scriptTag);
this.m_rendererPlugin = (window as any)[`converter.someConverter`];
【问题讨论】:
-
您正在使用 node.js 标签,并且您指的是 RequireJS 文档中有关 Node.js 的部分内容。但是,由于文档中给出的原因,您报告看到的错误永远不会发生在 Node 中:RequireJS 只会将请求传递给 Node 的
require,而require('path')会给您 Node 的 path module。您是真的在 Node 中运行代码,还是在浏览器中运行代码? -
对不起,我没有提到它。是的,我正在浏览器中运行。问题是 require() 在浏览器中不起作用,我希望使用 RequireJS 来解决这个问题。还是我走错路了?
-
我的意思是TypeScript是用JavaScript编译的
-
也许我可以以某种方式使用 webpack?使用 require.resolve("path") 获取模块 id 然后将 require('path') 替换为 __webpack_require__(123)?
标签: javascript node.js requirejs eval