有没有办法重新排列 TypeScript 编译器生成的 JavaScript 个模块?
Is there a way to rearrange JavaScript modules generated by the TypeScript compiler?
我有一个 TypeScript 项目,项目结构的组织方式与典型的 Maven Java 项目没有什么不同。下面大致是项目结构的样子。
.
├── gulpfile.js
├── index.html
├── package.json
├── src
│ ├── entity
│ │ ├── car.ts
│ │ ├── animal.ts
│ └── sevice
│ ├── dao
│ │ ├── cardao.ts
│ │ ├── animaldao.ts
│ └── validator
│ ├── carvalidator.ts
│ └── animalvalidator.ts
├── test
│ ├── entity
│ │ ├── car.spec.ts
│ │ ├── animal.spec.ts
│ └── service
│ └── dao
│ ├── carvalidator.spec.ts
│ └── animalvalidator.spec.ts
├── tsconfig.json
└── webpack.config.js
我能够为 commonjs/webpack、系统和 amd 生成单个 *.js
文件。
- 对于commonjs/webpack,我用
tsc
+tsconfig.json
然后webpack
+webpack.config.js
生成单个文件,bundle.js.
- 对于系统,我只是使用模块设置为系统的
gulp-typescript
任务来生成单个文件,lib-system.js.
- 对于 amd,我再次使用
gulp-typescript
并将模块设置为 amd 以生成单个文件,lib-amd.js.
然而,在我将这些单个 *.js
文件加载到浏览器中之后(对于 webpack 我只使用 <script>
标签,而对于另一个我使用 SystemJS
),我注意到我必须按如下方式实例化我的对象。
var c = new car.Car('chevy', 'traverse', 2017);
var a = new animal.Animal('cat');
我不喜欢在代码 car.Car
或 animal.Animal
中重复自己。有没有办法让我可以在不改变项目结构的情况下执行以下操作?
var c = new entity.Car('chevy', 'traverse', 2017);
var a = new entity.Animal('cat');
当然我可以只创建一个文件,entity.ts
并在该文件中定义 Car
和 Animal
(或所有实体,有很多)。但是对我来说,拥有一个包含很多 类 的长文件只是为了将模块逻辑地组合在一起似乎相当愚蠢。
我天真地尝试将所有 *.ts
文件合并到一个超级 ts
文件中,但这实际上行不通,因为
- 有很多导入,你必须删除它们(我不知道
gulp-concat
是否可以执行此操作,或者我是否需要将另一个包通过管道传输到流程中才能执行此操作)
- sub-类 必须在 super-类 之后定义(因为 gulp-concat 在连接文件时不关心此规则)
所以我的问题是,是否有可能将我的 类(按功能,例如实体、dao、验证程序等)逻辑分组到模块中,而不是默认分组(按文件,一个文件我相信实际上是一个模块)?
我希望有一些工具可以实现这一点,但还没有找到任何解决方案。
我有一个 TypeScript 项目,项目结构的组织方式与典型的 Maven Java 项目没有什么不同。下面大致是项目结构的样子。
. ├── gulpfile.js ├── index.html ├── package.json ├── src │ ├── entity │ │ ├── car.ts │ │ ├── animal.ts │ └── sevice │ ├── dao │ │ ├── cardao.ts │ │ ├── animaldao.ts │ └── validator │ ├── carvalidator.ts │ └── animalvalidator.ts ├── test │ ├── entity │ │ ├── car.spec.ts │ │ ├── animal.spec.ts │ └── service │ └── dao │ ├── carvalidator.spec.ts │ └── animalvalidator.spec.ts ├── tsconfig.json └── webpack.config.js
我能够为 commonjs/webpack、系统和 amd 生成单个 *.js
文件。
- 对于commonjs/webpack,我用
tsc
+tsconfig.json
然后webpack
+webpack.config.js
生成单个文件,bundle.js. - 对于系统,我只是使用模块设置为系统的
gulp-typescript
任务来生成单个文件,lib-system.js. - 对于 amd,我再次使用
gulp-typescript
并将模块设置为 amd 以生成单个文件,lib-amd.js.
然而,在我将这些单个 *.js
文件加载到浏览器中之后(对于 webpack 我只使用 <script>
标签,而对于另一个我使用 SystemJS
),我注意到我必须按如下方式实例化我的对象。
var c = new car.Car('chevy', 'traverse', 2017);
var a = new animal.Animal('cat');
我不喜欢在代码 car.Car
或 animal.Animal
中重复自己。有没有办法让我可以在不改变项目结构的情况下执行以下操作?
var c = new entity.Car('chevy', 'traverse', 2017);
var a = new entity.Animal('cat');
当然我可以只创建一个文件,entity.ts
并在该文件中定义 Car
和 Animal
(或所有实体,有很多)。但是对我来说,拥有一个包含很多 类 的长文件只是为了将模块逻辑地组合在一起似乎相当愚蠢。
我天真地尝试将所有 *.ts
文件合并到一个超级 ts
文件中,但这实际上行不通,因为
- 有很多导入,你必须删除它们(我不知道
gulp-concat
是否可以执行此操作,或者我是否需要将另一个包通过管道传输到流程中才能执行此操作) - sub-类 必须在 super-类 之后定义(因为 gulp-concat 在连接文件时不关心此规则)
所以我的问题是,是否有可能将我的 类(按功能,例如实体、dao、验证程序等)逻辑分组到模块中,而不是默认分组(按文件,一个文件我相信实际上是一个模块)?
我希望有一些工具可以实现这一点,但还没有找到任何解决方案。