对于上下文(虽然它并不重要),我正在尝试将SVGMorpheus导入到打字稿项目(Angular 2)中。
SVGMorpheus只是一个全球性的。它被声明如下:
import * as SVGMorpheus from "./path/to/svg-morpheus"
即。分配给全球的标准老派javascript IIFE。在我的项目中,我试图将其导入:
console.log(SVGMorpheus); //Outputs "{}"
这样可以正常工作并且没有错误,但SVGMorpheus只是一个空对象。
public class FilterArgResolver implements HandlerMethodArgumentResolver {
ExampleMatcher startMatcher = ExampleMatcher.matching()
.withStringMatcher(ExampleMatcher.StringMatcher.STARTING);
@Override
public boolean supportsParameter(MethodParameter param) {
return param.getParameterAnnotation(Filter.class) != null;
}
@Nullable
@Override
public Object resolveArgument(MethodParameter param,
@Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest,
@Nullable WebDataBinderFactory binderFactory) throws Exception {
Class clazz = param.getParameterAnnotation(Filter.class).value();
Object o = clazz.getConstructor().newInstance();
ServletRequestDataBinder b = (ServletRequestDataBinder) binderFactory.
createBinder(webRequest, o, "filter");
b.bind((ServletRequest) webRequest.getNativeRequest());
BindingResult r = b.getBindingResult();
Object t = r.getTarget();
return Example.of(t, startMatcher);
}
}
。
任何使用它的尝试都会导致错误。
有谁知道我做错了什么?我还添加了一个typings.d.ts文件,但没有帮助。 SVGMorpheus不支持打字或任何形式的UMD表格。
答案 0 :(得分:0)
这不是来自Typesciprt的特殊问题,而是在导入/导出文件的所有情况下都可能发生的一般问题。答案是并非所有的javascript文件都可以导出。特别是,在这种情况下,答案是“否”。我将假设您正在使用Webpack,如果不这样做,我强烈建议您最终使用Webpack。
从Webpack人员(https://github.com/webpack/docs/wiki/shimming-modules)编写的官方文档中,有一种解决此案例的方法,其中文件不支持现代导入/导出技术。
您需要“exports-loader”才能使IIFE全局模块准备好导出到其他脚本。
var SVGMorpheus = require('./path/to/svg-morpheus'); // Wrong
var SVGMorpheus = require('exports-loader?SVGMorpheus!./path/to/svg-morpheus'); // Good
希望这能回答你的问题。感谢。
答案 1 :(得分:0)
这是一个角度cli问题。我没有用编译器注册脚本。 将node_module添加到angular-cli.json文件内的app对象中的scripts数组中就可以了:
{
...
"apps": [
...app definition stuff...
"scripts": [
"path/to/external/module"
]
]
}
请注意,这适用于任何外部IIFE类型的导入。不需要其他代码更新(原始邮政编码有效)。