如何有条件地删除生成的javascript文件?

时间:2015-03-25 21:38:44

标签: gulp

我正在使用Intellij,它默认将打字稿文件转换为与typescript源相同的目录中的js文件(因此,运行foo.ts会生成foo.js)。但是,我也有一些javascript文件是源文件(不是从typescript生成的),我不想无意中删除。

示例

   someDir\foo.ts          // original ts source file
   someDir\foo.js          // generated by intellij tsc compile, should be deleted
   someDir\bar.js          // original js sourcefile, should NOTbe deleted!

问题
我想删除所有具有匹配的** / * .ts文件的** / * .js文件 - 在上面的例子中,我想删除foo.js(因为它有相应的foo.ts)但是不要删除bar.js.是否有一些指定的gulp.src模式可用于指定'具有匹配** / * .ts文件'的所有** / * .js文件?如果是这样,我可以将生成的src流传递给del。

谢谢,
布拉德

P.S。而且我知道我可以做一些高级的Intellij打字稿配置来移动生成的js文件的位置,但我宁愿在它们的默认位置使用它们。另一个解决方法是明确地排除源流中的'source js'文件(使用!),但我宁愿使用模式,因为它不那么脆弱。

2 个答案:

答案 0 :(得分:3)

这应该有效:

var gulp = require('gulp');
var del = require('del');
var glob = require('glob');

var filter = function(file) {
    return file.replace(/.ts$/, '.js');
};

gulp.task('default', function() {
    return glob('./app/**/*.ts', function(err, files) {
        del(files.map(filter));
    })
});

您基本上使用glob来获取所有.ts个文件,如果有,请将生成的数组映射到过滤器函数。此函数使用.ts替换文件末尾的.js的所有出现,您将获得一个包含这些条目的新数组。最后,将新的球体传递给del

答案 1 :(得分:2)

我用批处理文件解决了这个问题。这是我的方法:

<强> delete_transpiled.bat

REM This script finds all *.ts files (recursivly in all sub directories)
REM and removes the associated *.js and *.js.map files.
REM the folder "node_modules" is excluded from this process.

@echo off
echo Removing transpiled files. Please wait...

for /R %%I in (*.ts) do (
    (Echo "%%~pI" | FIND /I "node_modules" 1>NUL) || (
        if exist %%~pI%%~nI.js del %%~pI%%~nI.js
        if exist %%~pI%%~nI.js.map del %%~pI%%~nI.js.map
    )
)

echo Done