2016-11-01 55 views
0

我有一个负责转换给定位置中的.ts文件并在另一个给定位置吐出.js的gulp任务。gulp-typescript正在编译所有.ts文件,而不仅仅是来自特定位置的文件。

我遇到的问题是,它不仅在发送到目的地之前将指定位置的.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" 
    ] 
} 

正如我所说,它确实transpile .js就好了,但我最终是所有 typscript文件,无论位置,转换为.js并复制到dist下的相同文件夹结构:

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

我在这里做错了什么?

回答

2

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:使用gulp.src(),而不是tsBotProject.src()gulpfile.js

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

喜斯文 - 感谢您的解释。 考虑到这一点,并再次看了我的gulpfile.js,这种行为确实有道理。使用我目前的方法,我需要为每个我想要编译的文件创建一个新的tsproject.json文件 - 而这只是没有意义。 所以我所做的是采取选项2,并且工作得很好 - 当然假设它仍然尊重tsBotProject(tsconfig.json设置)中的设置 再次感谢! –

相关问题