我正在尝试为现有的AngularJS + Typescript应用程序配置SystemJS。
我的模块加载有问题: 当我使用这种语法时:
import module1 from './path-to-module1'
TS编译器很高兴,但SystemJS不会找到此模块。经过一番调查后,我在SystemJS文档中找到了this:
System.defaultJSExtensions = true;
// requests ./some/module.js instead
System.import('./some/module');
很酷,现在TS编译器和SystemJS都能正常工作。但是,SystemJS文件说:
请注意,这是用于转换为使用显式扩展的兼容性属性,将来会弃用。
所以,我发现我应该在我的模块加载中添加.js
扩展,就像这样(删除'defaultJSExtensions = true'标志):
import module1 from './path-to-module1.js'
现在,SystemJS知道如何加载我的模块,由TS编译器说:
Cannot find module './path-to-module1.js'
如何让TS弄清楚这一点?我应该手动将所有模块添加到*.d.ts
文件吗?怎么样?
10倍!
修改
我找到this post,我想这应该是我需要做的。我在Grunt文件中找到了这个:
typescript: {
build: {
src: ...,
outDir: '...',
reference: 'reference.ts',
options: {
target: 'es5',
sourceMap: false,
declaration: false,
removeComments: false,
experimentalDecorators: true,
module: 'commonjs'
}
}
}
但是,将commonjs
更改为system
并没有帮助实现......
答案 0 :(得分:2)
Don't worry, the SystemJS documentation is a bit misleading... Once they remove the defaultJSExtension all you have to do it to mark your code directory as a package (In the systemJS configuration) You can read about it here
Anyway, the file name without the extension is a valid ES6 module import syntax, so SystemJS will have to support it, as I said they will support it using a different way in the configuration.