Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular Typescript:如何从源代码导入而不是从文件导入_Angular_Typescript - Fatal编程技术网

Angular Typescript:如何从源代码导入而不是从文件导入

Angular Typescript:如何从源代码导入而不是从文件导入,angular,typescript,Angular,Typescript,我使用这个片段: loadComponentname{ var url=this.configurationService.configuration.api_url+/generator/dynamic load/component/+name; this.http.geturl,{responseType:'text'}.subscribecomponentCode=>{ 让结果=ts.transpilecomponentCode; console.log组件,结果; }; } 如果我理解

我使用这个片段:

loadComponentname{ var url=this.configurationService.configuration.api_url+/generator/dynamic load/component/+name; this.http.geturl,{responseType:'text'}.subscribecomponentCode=>{ 让结果=ts.transpilecomponentCode; console.log组件,结果; };
} 如果我理解正确,结果是一个模块的JavaScript源代码,我将其称为动态模块,您希望加载该模块并访问其导出。假设有一个固定的、允许动态模块导入的小模块列表,那么将动态模块转换为CommonJS格式并编写一个小模块加载器来设置适当的上下文以评估JavaScript源代码可能是最简单的

function evalCommonjsModule(moduleSource: string, requireMap: Map<string, {}>) {
    let moduleFunc = eval("(module, exports, require) => {" + moduleSource + "}");
    let module = {exports: {}};
    moduleFunc(module, module.exports, (requireName) => {
        let requireModule = requireMap.get(requireName);
        if (requireModule === undefined)
            throw new Error(`Attempted to require(${requireName}), which was not in requireMap`);
        return requireModule;
    });
    return module.exports;
}


import * as AllowedImport1 from "allowed-import-1";
import * as AllowedImport2 from "allowed-import-2";

// In loadComponent:

// Example from https://github.com/Microsoft/TypeScript/wiki/Using-the-Compiler-API#a-simple-transform-function
let result = ts.transpileModule(componentCode, {
  compilerOptions: { module: ts.ModuleKind.CommonJS }
});
let resultModule = evalCommonjsModule(result, new Map([
    ["allowed-import-1", AllowedImport1],
    ["allowed-import-2", AllowedImport2]
]));
let name = resultModule.name;

如果动态模块的导入不限于预先知道的短列表,那么您的选项将取决于您用于主项目的模块绑定器或加载程序。由于loadComponent已经是异步的,如果您的绑定器/加载程序支持动态导入,那么您可以将动态模块转换为AMD格式,并让您的迷你加载程序在加载动态模块主体之前执行动态导入动态模块的所有依赖项。可能有一些现有的库可以提供帮助,但我不熟悉它们;其他人可以随意添加有关他们的信息。

这就是你想要的吗?`设{name:result}=ts.transpilecomponentCode`我下载了一个组件的ts代码,我想在Transfile Codec之后在我的应用程序中导入该组件。您能再解释一下吗