在基于gulp的工作流中,我试图在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文件。生成的包不包括我期望转换所做的任何更改。
发布于 2016-08-08 22:51:59
不幸的是,你发现的不是错误,而是设计的行为。
tsify使用类型记录的编译器API将TypeScript转换为JavaScript。具体来说,它实现了CompilerHost接口:
createProgram抽象出与CompilerHost接口中的底层系统的任何交互。CompilerHost允许编译器读取和写入文件,获取当前目录,确保文件和目录的存在,并查询一些底层系统属性,例如区分大小写和新的行字符。
转换不是逐文件执行的。相反,整个程序是编译的,其结果、转换后的文件保存在内存中,然后传递给Browserify。此编译涉及从磁盘读取文件的TypeScript编译器基础结构。
作者的评论是这里
如何在tsify编译前转换类型记录?不幸的是,由于体系结构的限制,这是不可能的。tsify必须从磁盘加载文件,因为它根据模块解析语义提取额外的文件。即使有可能通过预tsify转换管道传递这些额外的文件(我认为这是不太可能的),但这将是灾难性的失败。您必须将转换后的文件写入磁盘,然后再将它们拖到Browserify,对不起:/
https://stackoverflow.com/questions/35301615
复制相似问题