如何有条件地删除生成的 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
我正在使用 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