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

How to conditionally delete generated javascript files?

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

示例

   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 模式可用于指定 'all **/*.js files that have a matching **/*.ts file'?如果是这样,我可以将生成的 src 流通过管道传输到 del.

谢谢,
布拉德

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

这应该有效:

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,您将获得一个包含 return 中的条目的新数组。最后,将新的 glob 传递给 del.

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

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