使用RequireJs和Grunt将TypeScript编译到单个文件中
Compiling TypeScript with RequireJs and Grunt into a single file
我们正试图优化由许多文件组成的TypeScript项目,方法是使用Grunt将其编译为一个支持AMD的文件。我们已经研究了我们在互联网上能找到的所有东西,但仍在努力掌握这项任务。只要我们不使用外部导入,编译就可以正常工作,但一旦我们引用了外部库,这个过程就会失败。示例:
-
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 ...
实际上不包括这两个文件。相反,它们将与RequireJ的适当define
语句分开。我们知道,使用Grunt的requirejs任务,可以将所有这些文件连接到一个文件中,但这需要我们将import
语句放在内部项目中,而这些语句是不需要的。
我们正在寻找的是一种连接所有TypeScript文件的方法,使它们捆绑所需的所有导入,并包括一个具有对所收集的所有类的所有外部依赖关系的单个define
块。
到目前为止,我们还没有找到将多个define
语句优化为单个define块的Grunt任务。我们可以看到两种策略:
- 将所有TypeScript文件连接到一个文件中并进行编译。问题:如何处理多个
import
语句(例如,在上面的示例中,MyClass1
和MyClass2
都依赖于jquery),这会导致TypeScript编译错误 - 单独编译每个文件,并将多个
define
块缩减为一个块
有人解决了这个问题吗?使用Grunt/request处理具有外部依赖关系的多个文件的最佳做法是什么?是否有任何实用程序允许我们重构TypeScript以处理多个导入(类似于C#的Roslyn)?
你不应该使用--out,因为它试图找出依赖关系的顺序,当你有外部依赖关系和AMD模块时,它会填充+它很慢,在更大的项目中真的无法维护。
实现工作构建的最佳方法是编译到多个.js文件,然后使用bundler作为下一个构建步骤(rjs/systemjs/webpack),或者如果切换到commonJS模块,则进行浏览。
您可以使用systemjs在开发时加载模块,并使用systemjsbuilder将所有需要的文件捆绑到一个文件中。
- 仅使用文件对象选择单个文件
- 在ES6中,模块将导致多个网络调用,因为两个模块不能在单个文件中定义
- Grunt imagemin-观察多个文件/文件夹优化单个文件
- Vue.js:如何在单个文件组件中指定道具
- Dropzone.js-上传文件夹结构和单个文件
- jQuery文件上传库:如何点击单个文件进行上传
- 在单个文件中需要js和多个已编译的Handlebar.js模板
- TypeScript 1.8,多个.ts文件中的单个文件-应用程序结构
- 将 JavaScript 缩小的文件压缩为单个文件
- 使用文件输入选择多个 FIle 时删除单个文件
- 如何从单个文件导出多个类
- 使用单个文件集成整个Yeoman,AngularJS项目
- 在 node.js 中的单个文件中调用两个函数
- 使用 RejamableJS 取消、中止和重试单个文件上传
- 将行添加到文件时,如何使用单个文件描述符或流检测和读取它们
- 与 requirejs 连接并排除单个文件
- 如何在plupload中获取队列的总文件大小而不是单个文件大小
- 在浏览器中使用javascript将HTML页面的所有外部资源嵌入到单个文件中
- blueimp文件上载的单个文件上载问题
- grunt contrib clean不删除单个文件