gulp 重命名多个文件
gulp rename multiple files
我有一个 gulp 脚本来操作主 html 文件并根据数组将其重命名为多个名称。这是脚本。
gulp.task('default', function () {
var data = ['name1','name2'];
for(var name in data){
gulp.src('src/master.html')
.pipe(*dosomething...*)
.pipe(rename(function(path) {
path.basename = name;
path.extname = '.html';
}))
.pipe(gulp.dest('dist'));
}
});
但是只生成了name2.html。谁能告诉我我的代码有什么问题。
for ... in
用于循环对象的键。对于一个数组,键是索引值(0 和 1),所以我很惊讶 name2.html
正在生成 - 也许它已经存在于之前的 运行.
要么更改为索引 for 循环 for (var i = 0; i < data.length; i++) { ...
,要么使用 path.basename = data[name];
从数组中获取名称
Don't make functions within a loop.
您的循环创建了多个传递给 rename
的函数。这些函数中的每一个都引用相同的变量 name
。然而,这些函数不会立即执行,而是在创建了 all 之后才执行。这意味着 all 你的函数引用 name
在循环中的最后一个值。
您需要创建多个 name
变量,方法是将 for
循环替换为循环构造,为每个值创建一个新的函数作用域,例如Array.forEach
.
您还在循环中创建了多个流。在将它们与 merge-stream
so gulp can determine when your task has finished.
合并后,您应该 return 这些流
var gulp = require('gulp');
var rename = require('gulp-rename');
var merge = require('merge-stream');
gulp.task('default', function () {
var data = ['name1','name2'];
var streams = [];
data.forEach(function(name) {
var stream = gulp.src('src/master.html')
.pipe(rename(function(path) {
path.basename = name;
path.extname = '.html';
}))
.pipe(gulp.dest('dist'));
streams.push(stream);
});
return merge(streams);
});
我有一个 gulp 脚本来操作主 html 文件并根据数组将其重命名为多个名称。这是脚本。
gulp.task('default', function () {
var data = ['name1','name2'];
for(var name in data){
gulp.src('src/master.html')
.pipe(*dosomething...*)
.pipe(rename(function(path) {
path.basename = name;
path.extname = '.html';
}))
.pipe(gulp.dest('dist'));
}
});
但是只生成了name2.html。谁能告诉我我的代码有什么问题。
for ... in
用于循环对象的键。对于一个数组,键是索引值(0 和 1),所以我很惊讶 name2.html
正在生成 - 也许它已经存在于之前的 运行.
要么更改为索引 for 循环 for (var i = 0; i < data.length; i++) { ...
,要么使用 path.basename = data[name];
Don't make functions within a loop.
您的循环创建了多个传递给 rename
的函数。这些函数中的每一个都引用相同的变量 name
。然而,这些函数不会立即执行,而是在创建了 all 之后才执行。这意味着 all 你的函数引用 name
在循环中的最后一个值。
您需要创建多个 name
变量,方法是将 for
循环替换为循环构造,为每个值创建一个新的函数作用域,例如Array.forEach
.
您还在循环中创建了多个流。在将它们与 merge-stream
so gulp can determine when your task has finished.
var gulp = require('gulp');
var rename = require('gulp-rename');
var merge = require('merge-stream');
gulp.task('default', function () {
var data = ['name1','name2'];
var streams = [];
data.forEach(function(name) {
var stream = gulp.src('src/master.html')
.pipe(rename(function(path) {
path.basename = name;
path.extname = '.html';
}))
.pipe(gulp.dest('dist'));
streams.push(stream);
});
return merge(streams);
});