我正在使用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'文件(使用!),但我宁愿使用模式,因为它不那么脆弱。
答案 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