这是我的代码:
'use strict';
var gulp = require('gulp'),
$ = require('gulp-load-plugins')(),
module.exports = function(options) {
gulp.task('test', function () {
gulp.src('external/bower_components/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')
.pipe(gulp.dest('dist/'));
});
};
此字符串 gulp.dest('dest/') 会将文件 _bootstrap.scss 保存在 'dest/' 文件夹中。
如果我改变字符串
gulp.src('external/bower_components/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')
转为字符串
gulp.src('external/*/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')
然后是字符串
gulp.dest('dest/')
将文件 _bootstrap.scss 保存在 dest/bower_components/bootstrap-sass-official/assets/stylesheets 文件夹中。
您能否解释一下并给我一个链接,了解为什么在第一种情况下我们在 dest 文件夹内没有很多文件夹,而在第二种情况下 dest 文件夹内有很多文件夹?
如果我理解正确,在第二种情况下,glob 模式将转换为完整文件路径数组。这意味着在我的示例中,glob nodejs 模块会将 glob 模式 'external/*/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss' 转换为 数组 ['external/bower_components/bootstrap-sass-official/assets/stylesheets/_bootstrap.scss']。那么为什么在第二种情况下“dest/”文件夹内有很多嵌套文件夹,但在第一种情况下“dest/”文件夹内没有嵌套文件夹?
最佳答案
确实,这有点奇怪,因为 Node 全局的行为非常隐式。但事实上这正是你所希望的。例如,考虑一下您在 external
中有多个文件夹的情况,它们都包含文件 bootstrap-sass-official/assets/stylesheets/_bootstrap.scss')
。那么您就无法在目标中保存两个同名的文件。
在没有研究过 node-glob 源代码的情况下,我认为它可以通过在 /*/
之后切割文件路径来缓解这种情况,并自动将其附加到您的 dest
路径。
话虽如此,这是隐式行为,如果您确实需要该数组或希望将来添加文件,您可以通过自己分配数组来轻松避免它gulp.src(['firstfile.js'])
。
由于 Gulp 文档没有提供太多有关通配模式的信息,我发现这些链接是最好的帮助。 Read up on node-glob和 Gulp on smashing .
关于javascript - 无法理解 gulp.src() 的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29913434/