在typescript文件中导入带有systemJs的节点模块

时间:2016-08-04 20:33:32

标签: typescript import systemjs node-modules

所以我尝试将节点模块(immutablejs)导入到我的typescript文件中:

/// <reference path="../node_modules/immutable/dist/immutable.d.ts" />
import { Map } from 'immutable';
var myMap = Map();

以下是我的index.html中的脚本标记:

<script src="node_modules/systemjs/dist/system.js"></script>
<script src="node_modules/typescript/lib/typescript.js"></script>
<script>
    System.config({
        transpiler: 'typescript',
        packages: {
            src: {
                defaultExtension: 'ts'
            }
        }
    });
    System
    .import('src/main.ts')
    .then(null, console.error.bind(console));
</script>

虽然intellisense在VS Code中工作,但我的浏览器告诉我它无法找到不可变的: system.src.js:1057获取http://localhost:3000/immutable/ 404(未找到)

导入一个带有相对路径的自编写的打字稿模块,效果很好..

我做错了什么?

1 个答案:

答案 0 :(得分:2)

使用正确的类型定义来满足typescript编译器不会将systemjs配置为知道在哪里加载immutablejs的实际javascript代码。

当您使用systemjs时,轮到您相应地配置systemjs,以便它知道从哪里加载库。如果您不这样做,它将尝试从导入的同名服务器加载导入的模块作为文件。对于完全相同的问题,请参阅此答案:

How to configure SystemJs for ImmutableJs to work in Angular 2 project

有关如何配置systemjs的详细信息,请参阅此处的文档:https://github.com/systemjs/systemjs/blob/master/docs/config-api.md#map

您可以在设置tsconfig时省略d.ts文件的引用路径,以便它自动搜索node_modules,或者使用类似工具的工具来安装不包含库的定义为他们的模块提供一些打字。 (见这里:https://github.com/typings/typings - 但这不应该是immutablejs所必需的。)