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
接口:
createProgram
在CompilerHost
接口中抽象出与底层系统的任何交互。CompilerHost
允许编译器读取和写入文件,获取当前目录,确保文件和目录存在,并查询一些底层系统属性,如区分大小写和换行符。
转换不是逐个文件地执行的。 相反,整个程序是编译的,结果转换的文件保存在内存中,稍后传递给Browserify。 此编译涉及从磁盘读取文件的TypeScript编译器基础结构。
作者的评论如下:
如何在tsify之前转换打字稿编译它?
由于架构限制,这是不可能的。 tsify必须从磁盘加载文件,因为它根据模块分辨率语义拉入额外的文件。 即使可以通过pre-tsify转换pipe道(我认为这不太可能)传递这些额外的文件,它将是灾难性的不成熟的。 您必须将转换后的文件写入磁盘,然后将其拖入Browserify,对不起:/