在 typescript 文件中使用 systemJs 导入节点模块

Import node module with systemJs in typescript file

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

/// <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>

虽然智能感知在 VS Code 中工作,但我的浏览器告诉我它找不到不可变的: system.src.js:1057 GET http://localhost:3000/immutable/ 404(未找到)

使用相对路径导入自己编写的打字稿模块效果很好..

我做错了什么?

具有正确的类型定义来满足 typescript 编译器不会配置 systemjs 知道在哪里加载真正的 javascript immutablejs 代码。

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

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

您还可以在设置 tsconfig 时省略 d.ts 文件的参考路径,这样它将自动搜索 node_modules 或使用类似打字的工具来安装库的定义不要在他们的模块中提供一些类型。 (参见此处:https://github.com/typings/typings - 但 immutablejs 不需要这样做)。