gulp-typescript 正在编译所有 .ts 文件,而不仅仅是来自特定位置的文件

gulp-typescript is compiling all .ts files not just those from specific location

我有一个 gulp 任务负责在给定位置转换 .ts 文件并在另一个给定位置吐出 .js。

我遇到的问题是,在发送到目的地之前,它不仅从给定位置获取 .ts 并转换为 .js,而且还对父文件夹和同级文件夹中的所有内容执行相同的操作。

我的文件夹结构如下:

root
|__dist
|
|__source
|  |__bot
|  |__logon

这是我的 gulpfile.js 的简化版本:

var gulp = require("gulp"),
    ts = require("gulp-typescript");

var paths = {
  botScripts: 'source/bot/*.ts',
  releaseBot: 'dist/bot'
};

// Create typescript project
var tsBotProject = ts.createProject('tsconfig.json');

// Create the tasks
gulp.task('botscripts', function() {

  var tsResult = tsBotProject.src(paths.botScripts)
  .pipe(tsBotProject());

  return tsResult.js.pipe(gulp.dest(paths.releaseBot));
});

这是我的 tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  },
  "exclude": [
      "node_modules"
  ]
}

正如我所说,它确实可以很好地转换为 .js,但我最终得到的是 all 打字稿文件,无论位置如何,都转换为 .js 和复制到 dist 下的相同文件夹结构中:

root
|__dist
|  |__bot
|  |  |__*.js
|  |__logon
|     |__*.js
|
|__source
|  |__bot
|  |__logon

我做错了什么?

tsBotProject.src() 不接受任何参数。您正试图传递它 paths.botScripts,但该参数被简单地忽略了。相反,tsBotProject.src() 发出的正是您在 tsconfig.json 中指定的那些文件。在你的情况下,除了 node_modules.

你有两个选择:

选项 1: 您可以像这样在 gulpfile.js 中使用 tsBotProject.src()

var tsResult = tsBotProject.src()
  .pipe(tsBotProject());

为了使其正常工作,您还必须将 include 属性 添加到您的 tsconfig.json:

{
  "compilerOptions": {
    "target": "es6",
    "module": "commonjs"
  },
  "include": [
      "source/bot/*.ts"
  ],
  "exclude": [
      "node_modules"
  ]
}

选项 2:gulpfile.js 中使用 gulp.src() 而不是 tsBotProject.src()

var tsResult = gulp.src(paths.botScripts)
  .pipe(tsBotProject());