SystemJS,IntelliJ和模块包含?

时间:2015-12-31 19:40:37

标签: intellij-idea typescript angular systemjs

希望有人可以了解模块包含和systemJS如何工作......我有一个骨架Angular2应用程序,结构简单;

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

我的bootstrap.ts导入app;

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 for util只是一个导出;

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都快乐的正确方法?

2 个答案:

答案 0 :(得分:1)

我的SystemJS问题原来是一个红色的鲱鱼 - 我正在设置我的模块导出/导入错误。完成后,SystemJS和IntelliJ都能理解模块。请参阅此处,了解如何在ES6中执行导入/导出:Re-exporting ES6 modules in TS 1.7?

答案 1 :(得分:0)

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

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