从打字稿中的JS文件导入var



对于上下文(尽管不是那么重要(,我试图将svgmorpheus导入打字稿项目(Angular 2(。

svgmorpheus只是一个全球。它被称为:

var SVGMorpheus = (function(){....code...})())

即。标准的老式JavaScript IIFE分配给全球。在我的项目中,我试图这样导入它:

import * as SVGMorpheus from "./path/to/svg-morpheus"

这可以正常工作,没有错误,但是svgmorpheus只是一个空的对象。

console.log(SVGMorpheus); //Outputs "{}"

任何尝试使用它的尝试都会导致错误。

有人知道我在做什么吗?我还添加了一个Typings.d.ts文件,该文件无济于事。svgmorpheus不支持打字或任何形式的UMD形式。

这不是TypesCIPRT的特殊问题,而是在所有要导入/导出文件的情况下都可能发生的一般问题。答案是,并非所有JavaScript文件都准备好被导出。特别是在这种情况下,答案是"否"。我要假设您正在使用WebPack,如果您不建议您最终使用WebPack。

从WebPack Guys(https://github.com/webpack/docs/wiki/wiki/shimming-modules(撰写的官方文件中,有一种方法可以解决此情况,其中文件不支持现代技术进出口。

您需要" enfort-loader"才能使您的iife全局模块准备出口到其他脚本。

var SVGMorpheus = require('./path/to/svg-morpheus'); // Wrong
var SVGMorpheus = require('exports-loader?SVGMorpheus!./path/to/svg-morpheus'); // Good

希望这个答案您的问题。谢谢。

这是一个角度CLI问题。我没有在编译器上注册脚本。将node_module添加到app object中的脚本阵列中,angular-cli.json文件中的功能:

{
   ...
   "apps": [
      ...app definition stuff...
      "scripts": [
          "path/to/external/module"
      ]   
   ]
}

请注意,这应该适用于任何外部IIFE型导入。不需要其他代码更新(原始邮政编码工作(。

最新更新