打字稿如何知道systemJS配置

时间:2016-05-11 13:47:29

标签: typescript systemjs

我正在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别名设置。打字稿怎么知道这个?

1 个答案:

答案 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编译器选项指示编译器不要将任何文件“添加”到未在命令行上传递的编译中。它仍会尝试将模块解析为文件,但如果文件未指定,则不会包含该文件。

不确定上述方法,您可能需要尝试查看。

希望这会有所帮助!!