希望有人可以了解模块包含和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都快乐的正确方法?
答案 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'
}
}
});