繁体   English   中英

有没有办法重新排列由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,system和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.Caranimal.Animal重复自己的事实。 有没有办法做到这一点,以便我可以在更改项目结构的情况下执行以下操作?

var c = new entity.Car('chevy', 'traverse', 2017);
var a = new entity.Animal('cat');

当然,我可以只创建一个文件entity.ts并在该文件中定义CarAnimal (或所有实体,数量很多)。 但是,对于我来说,拥有一个包含很多类的长文件只是为了将模块逻辑地组合在一起,这似乎很愚蠢。

我冒险将所有的*.ts文件天真地合并到一个uber ts文件中,但这实际上并没有用,因为

  • 有很多导入,您必须删除它们(我不知道gulp-concat可以执行此操作,或者我是否需要通过另一个管道将其导入进程中)
  • 子类必须在超类之后定义(因为gulp-concat在连接文件时并不关心此规则)

所以我的问题是,是否有可能将我的类(按功能,例如实体,Dao,验证器等)按逻辑分组而不是默认分组(按文件,我相信一个文件实际上是一个模块)?

我希望有一些工具可以实现这一目标,但尚未找到任何解决方案。

实际上,一种解决方案是创建一个用于分组的模块src/entity.ts ,然后src/entity.ts 重新导出类:

export { Car } from './entity/car';
export { Animal } from './entity/animal';

另一种可能性是使用rollup.js ,它似乎能够将多个已编译的模块组合为一个模块,但这仅适用于javascript,而我对此没有任何经验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM