我正在ASP.Net核心项目中构建和Angular2应用程序。我有systemJS配置为映射第三方模块,但我收到编译错误。
我的index.html引用了systemJS.config.js文件,我认为这是正确的。但是,index.html是一个运行时文件,我不认为typescript编译器知道它。
打字稿如何在编译时知道systemjs(和它的配置)?
其中一个第三方模块是ng2-file-upload。
systemjs.config.js有:
var map = {
'app': 'lib/spa', // 'dist',
'rxjs': 'lib/js/rxjs',
'angular2-in-memory-web-api': 'lib/js/angular2-in-memory-web-api',
'@angular': 'lib/js/@angular',
'ng2-file-upload': 'lib/js/ng2-file-upload/ng2-file-upload'
};
var config = {
defaultJSExtensions: true,
map: map,
packages: packages
}
System.config(config);
这是从index.html引用的:
<script>
System.import('app').catch(function(err){ console.error(err); });
</script>
在我的组件中,我使用这样的导入:
import {FILE_UPLOAD_DIRECTIVES, FileUploader} from 'ng2-file-upload';
我收到此编译器错误:
错误TS2307:找不到模块'ng2-file-upload'。
我的想法是打字稿不知道systemJS地图中的ng2-file-upload别名设置。打字稿怎么知道这个?
答案 0 :(得分:0)
你走了。
打字稿在编译时如何知道systemjs(以及它的配置)?
你的项目中可能有一个typings文件夹,它应该包含systemjs的定义,它可以让你智能感知。对于编译,Typescript遵循Module Resolution - Typescript的约定。
对于第三方库ng2-file-upload
我看到你的系统配置文件中有一个如下配置,我想在构建时你将这个模块的文件从 node_modules 放到 lib / js 文件夹中。
'ng2-file-upload': 'lib/js/ng2-file-upload/ng2-file-upload'
理想情况下,如果项目中有node_modules,则Typescript将使用Module Resolution约定解析它。
如果您没有传统的文件夹结构,打字稿可能无法解析模块,
但是,您可以包含 - noResolve
使用--noResolve
通常,编译器会在启动编译过程之前尝试解析所有模块导入。每次成功解析导入到文件时,该文件都会添加到编译器稍后将处理的文件集中。
--noResolve编译器选项指示编译器不要将任何文件“添加”到未在命令行上传递的编译中。它仍会尝试将模块解析为文件,但如果文件未指定,则不会包含该文件。
不确定上述方法,您可能需要尝试查看。
希望这会有所帮助!!