【问题标题】:typescript output order - gulp equivalent to tsc with tsconfig.json打字稿输出顺序 - gulp 相当于 tsconfig.json 的 tsc
【发布时间】:2016-02-08 16:51:19
【问题描述】:

给定一个 tsconfig 文件并使用命令行 tsc,一切正常。但是,使用 gulp-typescript 并指定 tsconfig.jsonoutFile 会创建不同的输出顺序 - 我的问题是我找不到像 tsc 那样生成相同 javascript 的 gulp 方式。

我们的构建工作流程基于 gulp;但tsc 是黄金标准,具有出色的手表功能,并具有广泛的工具支持(例如http://dev.ivogabe.com/using-vscode-with-gulp-typescript/)。如果我能让我们基于 gulp 的构建工作与 tsc 一样,那就太好了。

例如tsconfig.json:

{
  "compilerOptions": {
    "declaration": false,
    "preserveConstEnums": true,
    "outFile": "out/out.js",
    "sourceMap": true,
    "target": "es5",
    "noEmitOnError": true
  },
  "exclude": [
    "node_modules",
    "out"
  ]
}

例如gulpfile.js:

"use strict";
var gulp = require('gulp');
var typescript = require('gulp-typescript');

var tsProject = typescript.createProject('tsconfig.json');

gulp.task('typescript:compile', function () {
    var tsResult = tsProject.src()
        .pipe(typescript(tsProject));

    return tsResult.js.pipe(gulp.dest('out'));
});
gulp.task('default', ['typescript:compile']);

同样,我的问题是tsc 与上述tsconfig.json;和gulp 与上面的gulpfile.jstsconfig.json(使用gulp-typescript)为打字稿文件的非平凡目录产生不同的输出顺序。开发人员应该能够在两个构建过程之间任意切换,并确保他们没有错过输出排序错误。

我不明白用于tscgulp-typescript 的输出排序规则之间的区别,所以我无法为这个问题创建一个简单的重现案例。但理想情况下,gulp-typescript 在使用 tsconfig 项目时会使用与 tsc 相同的顺序。

我可以通过使用“子进程”.exec 来调用 tsc 来解决这个问题,但是 gulp-typescript 具有更好的 gulp 集成;我也愿意使用任何其他直接调用 typescript 编译器的 gulp 插件(并使用 tsconfig.json 项目文件),但我一直找不到。

【问题讨论】:

    标签: typescript gulp-typescript


    【解决方案1】:

    我的问题是我找不到一种 gulp 方式来生成与 tsc 相同的 javascript

    TypeScript 有一个内部的排序实现,它通过以下方式实现:

    • 在命令行中传递的文件顺序。如果您是 tsconfig,这无关紧要。
    • 检测文件的顺序。由于您使用的是 tsconfig,它将从第一个文件开始,然后通过 referencesimport 指令对其他文件进行排序。

    注意:这对 API 使用者(如 gulp)可用。即使仅使用 tsc 也可能导致问题:https://github.com/TypeStrong/atom-typescript/blob/master/docs/out.md

    所以使用外部模块:https://basarat.gitbooks.io/typescript/content/docs/project/modules.html

    这是一个快速入门:https://basarat.gitbooks.io/typescript/content/docs/quick/browser.html

    【讨论】:

    • 我们使用模块,但是 tsc 和 gulp-typescript 之间仍然存在排序差异 - 我认为你的观点是,如果你正确使用模块和导入,排序应该无关紧要。我同意这一点,但仍然不希望由于排序差异而容易受到奇怪的错误的影响。我了解使用 outFile 的缺点 - 现实情况是库和 SPA 代码需要单个 js 文件。听起来一种选择是明确列出 tsconfig.json 文件中的所有文件 - 这似乎不太适合维护,但应该有利于构建一致性。
    猜你喜欢
    • 2018-10-10
    • 1970-01-01
    • 1970-01-01
    • 2019-09-28
    • 2015-03-23
    • 2017-02-11
    • 1970-01-01
    • 2016-01-19
    • 2017-10-11
    相关资源
    最近更新 更多