SystemJS、IntelliJ 和模块包含?

SystemJS, IntelliJ, and Module Includes?

希望有人能阐明模块包含和 systemJS 是如何工作的。我有一个骨架 Angular2 应用程序,结构简单;

-app
|-lib (holds shims and other node libs)
|-components
 |-app
  |-app.ts/html

我的 bootstrap.ts 导入应用程序;

import {AppCmp} from './components/app/app';

然后我配置systemJS:

System.config({"defaultJSExtensions":true,"paths":{"bootstrap":"/bootstrap","*":"/lib/*"}})

到目前为止效果很好。然后我创建了另一个名为 util 的文件夹:

-app
|-lib (holds shims and other node libs)
|-util
 |- index.ts and uuid.ts
|-components
 |-app
  |-app.ts/html

我的 index.ts 实用程序只是一个导出;

export * from './uuid';

和uuid.ts导出函数;

export function uuid() {
    return "test";
}

这就是事情变得奇怪的地方。我的理解是,我现在应该可以在 app.ts;

中执行此操作
import {uuid} from '../../util';

IntelliJ 对此表示无法解析符号 'uuid',而 systemJS 试图获取 /util.js,这当然不存在。所以我尝试了;

import * as util from 'util';

现在 IntelliJ 抱怨 util.uuid() 未解决。几乎就像它没有解析 index.js 中的导出一样。并且 SystemJS 仍然尝试获取 /util.js 但失败了。

所以我重新配置SystemJS:

System.config(
    {
        "defaultJSExtensions": true,
        "paths": {
            "bootstrap": "/bootstrap",
            "util": "/util/index",
            "*": "/lib/*"
        }
    }
);

这实际上在浏览器中有效,但 IntelliJ 仍然不高兴。而且我真的不认为我应该像这样明确定义我的应用程序中的每个模块——或者我应该这样做吗?

所以我真的很困惑..相对路径模块和嵌套导出实际上是如何工作的? SystemJS 是如何处理它们的?为什么它在解析 app.ts 东西时没有问题,但不能解析 util?

或者更简单地说;让 IntelliJ 和 SystemJS 都快乐的正确方法是什么?

我的 SystemJS 问题原来是一个转移注意力的问题——我设置模块 exports/imports 不正确。如果做得好,SystemJS 和 IntelliJ 都能理解模块。请参阅此处以了解如何在 ES6 中完成 import/export:

您可以为您的 systemjs 配置提供元数据,以说明您的应用程序将导入哪些类型的模块。

SystemJS.config({
  meta: {
    './module/path.js': {
      format: 'esm'
    }
  }
});