TSify在Browserify期间忽略转换

在我的基于工作stream的工作stream程中,我试图在tsify编译之前对所有的打字稿应用一个转换:

gulp.task( 'deploy-typescript', function() { var modulePath = configuration.files.typescript.entry; var bundleStream = browserify([modulePath]) .transform(includeTemplates) .plugin(tsify) .bundle(); return bundleStream .pipe(sourcestream(configuration.files.typescript.bundle)) .pipe(gulp.dest(configuration.files.typescript.destination)); } ); var includeTemplates = function(file, options) { return through(function(buffer, encoding, next) { this.push('!test!'); next(); } } 

但是,看起来tsify插件忽略了我的插件对源文件所做的任何更改,并使用.ts文件存在于磁盘上。 生成的捆绑包不包括我希望我的转换所做的任何更改。

不幸的是,你发现的不是一个错误,而是一个devise行为。

使用TypeScript的Compiler API, tsify将TypeScript转换为JavaScript。 具体来说,它实现了CompilerHost接口:

createProgramCompilerHost接口中抽象出与底层系统的任何交互。 CompilerHost允许编译器读取和写入文件,获取当前目录,确保文件和目录存在,并查询一些底层系统属性,如区分大小写和换行符。

转换不是逐个文件地执行的。 相反,整个程序是编译的,结果转换的文件保存在内存中,稍后传递给Browserify。 此编译涉及从磁盘读取文件的TypeScript编译器基础结构。

作者的评论如下:

如何在tsify之前转换打字稿编译它?

由于架构限制,这是不可能的。 tsify必须从磁盘加载文件,因为它根据模块分辨率语义拉入额外的文件。 即使可以通过pre-tsify转换pipe道(我认为这不太可能)传递这些额外的文件,它将是灾难性的不成熟的。 您必须将转换后的文件写入磁盘,然后将其拖入Browserify,对不起:/

Interesting Posts