假设我有一个像这样的LESS CSS目录结构:
less/
core/
_main.less
header.less
body.less
footer.less
contact/
_main.less
form.less
details.less
Run Code Online (Sandbox Code Playgroud)
我想编写一个Gulp任务,它将_main.less在less/dir的每个子目录中查找文件,将其传递给gulp-less并将输出写入css/dir,如下所示:
css/
core.css
contact.css
Run Code Online (Sandbox Code Playgroud)
因为_main.less包含其目录中的其他文件,只_main.less需要解析文件,但我希望输出文件具有其所在目录的名称.
到目前为止我有这个:
gulp.src('less/*/*/_main.less')
.pipe(less())
.pipe(gulp.dest('css'));
Run Code Online (Sandbox Code Playgroud)
但是这将创建一个这样的目录结构:
css/
core/
_main.css
contact/
_main.css
Run Code Online (Sandbox Code Playgroud)
但这不是我想要的.我正在考虑使用正则表达式匹配目录名称,将其返回到matchesvar中,并相应地重命名该文件.像这样的东西:
gulp.src(/less\/[^\/]+\/([^\/]+)\/_main.less/)
.pipe(less())
.pipe(rename(function(context) {
context.src.matches[1] + '.css'
}))
.pipe(gulp.dest('css'));
Run Code Online (Sandbox Code Playgroud)
这段代码只是一个例子.我无法弄清楚如何做这样的事情,或者甚至可能.
这可能吗?如果是这样,怎么样?
你看起来好像已经有这个,但也许没有看到该gulp-rename插件?
我甚至认为你不需要使用a RegExp,这样的东西应该工作:
var rename = require('gulp-rename'),
path = require('path'); // node Path
//...
gulp.src('less/**/_main.less')
.pipe(less())
.pipe(rename(function(filepath) {
// replace file name to that of the parent directory
filepath.basename = path.basename(filepath.dirname);
// remove parent directory from relative path
filepath.dirname = path.dirname(filepath.dirname);
// leave extension as-is
}))
.pipe(gulp.dest('css'));
Run Code Online (Sandbox Code Playgroud)