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

时间:2016-11-01 19:25:31

标签: javascript node.js typescript gulp gulp-typescript

我有一个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,但我最终得到的是所有的typscript文件,无论位置如何,都转换为.js并复制到同一个文件夹中dist下的结构:

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

我在这里做错了什么?

1 个答案:

答案 0 :(得分:3)

tsBotProject.src()不接受任何争论。你试图传递它paths.botScripts,但这个论点被忽略了。相反,tsBotProject.src()会精确地发出您在tsconfig.json中指定的文件。在您的情况下,除node_modules之外的所有内容。

您有两种选择:

选项1:您可以在tsBotProject.src()中使用gulpfile.js,如下所示:

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

为了实现此目的,您还必须向include添加tsconfig.json媒体资源:

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

选项2:gulp.src()中使用tsBotProject.src()代替gulpfile.js

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