我们正在尝试通过使用Grunt将其编译为单个支持AMD的文件来优化由许多文件组成的TypeScript项目。我们已经研究了我们在互联网上找到的所有内容,但仍在努力抓住这项任务。只要我们不使用外部导入,编译就可以正常工作,但只要我们引用外部库,该过程就会失败。例如:
MyClass1.ts
import jquery = require('jquery');
export class MyClass1{
//some code using jquery
}
MyClass2.ts
import jquery = require('jquery');
export class MyClass2{
//some other code using jquery
}
在这种情况下,即使使用
操作TypeScript编译器也是如此 tsc --out singlefile.js ...
实际上不包含这两个文件。相反,它们将与RequireJs的适当define
语句分开放置。我们知道,使用Grunt的requirejs任务可以将所有这些文件连接到一个文件中,但这需要我们将import
语句放在我们的内部项目中,而不需要它们。< / p>
我们正在寻找的是一种连接所有TypeScript文件的方法,它们捆绑所需的所有导入,并且它们包含一个define
块,所有外部依赖项都收集到所有类。< / p>
到目前为止,我们还没有找到将多个define
语句优化为单个定义块的Grunt任务。我们可以看到两种策略:
import
语句(例如,在上面的示例中,MyClass1
和MyClass2
都依赖于jquery),这会导致TypeScript编译错误。define
块减少为一个块。有没有人解决过这个问题?使用Grunt / require处理具有外部依赖性的多个文件的最佳实践是什么?是否有任何实用程序可以让我们重构TypeScript来处理多个导入(类似于Roslyn for C#)?
答案 0 :(得分:1)
您可以使用systemjs在开发时加载模块,并systemjs builder将所有需要的文件捆绑到一个文件中。
答案 1 :(得分:1)
你不应该使用--out,因为它试图找出依赖顺序,当你有外部依赖关系和AMD模块时它会填充+它在较大的项目中很慢而且实际上不可维护。
实现工作构建的最佳方法是编译为多个.js文件,然后使用bundler作为下一个构建步骤(rjs / systemjs / webpack)或者如果切换到commonJS模块则使用browserify。