【问题标题】:TSify ignores transforms during BrowserifyTSify 在 Browserify 期间忽略转换
【发布时间】:2016-02-09 20:32:26
【问题描述】:

在我基于 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 文件。生成的包不包含我希望我的转换做出的任何更改。

【问题讨论】:

    标签: javascript node.js gulp browserify tsify


    【解决方案1】:

    不幸的是,您发现的不是错误,而是设计行为。

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

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

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

    作者的cmets是here

    tsify 编译前如何转换 typescript?

    不幸的是,由于架构限制,这是不可能的。 tsify 必须从磁盘加载文件,因为它会根据模块解析语义拉入额外的文件。即使有可能通过 pre-tsify 转换管道传递这些额外的文件(我认为这不太可能),它的性能也将是灾难性的。您必须先将转换后的文件写入磁盘,然后再将它们拉入 Browserify,抱歉:/

    【讨论】:

      猜你喜欢
      • 2018-03-03
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2017-01-11
      • 1970-01-01
      • 2016-02-22
      • 2017-03-02
      相关资源
      最近更新 更多