为什么gulp.src不喜欢传递一个完整的文件路径数组?

mor*_*que 93 arrays glob node.js gulp

我正在尝试传递gulp.src我想要它处理的文件数组.这是阵列的原样.

['bower_components/jquery/jquery.js',
 'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
 'bower_components/superscrollorama/jquery.superscrollorama.js' ]
Run Code Online (Sandbox Code Playgroud)

我发现gulp.src似乎并不喜欢这样,第三个元素没有通过最终目的地.

当我引入一些像这样的通配符时,我发现一切正常:

['bower_components/**/jquery.js',
 'bower_components/**/js/greensock/TweenMax.min.js',
 'bower_components/**/jquery.superscrollorama.js' ]
Run Code Online (Sandbox Code Playgroud)

但为什么?与globbing的工作方式有关吗?我用Google搜索但无法找到答案.

也许这不是globbing的预期目的,但它对我来说没有意义,它应该以这种方式工作.任何人都能解释一下吗?

Ove*_*ous 161

传入完整路径数组时,将独立处理每个文件.globbing不知道路径的根在哪里(实际上,它是基于第一个glob猜测的).因此,每个文件都以它包含的文件夹为根,并且相对路径为空.

但是,有一个简单的解决方案.使用键base作为第二个参数传递一个对象gulp.src,并且所有内容都将具有正确的相对路径:

return gulp.src(['bower_components/jquery/jquery.js',
                'bower_components/superscrollorama/js/greensock/TweenMax.min.js',
                'bower_components/superscrollorama/jquery.superscrollorama.js' ],
            {base: 'bower_components/'})
        .pipe(...);
Run Code Online (Sandbox Code Playgroud)

  • 另外:在gulp文档中根本没有提到这一点,你必须点击[glob-stream`的文档](https://github.com/wearefractal/glob-stream)来解决这个问题. (23认同)
  • 如果路径不都具有相同的基础怎么办?我有一个类似的问题打开特定的情况:[gulp src不读取所需的json文件的数组值](http://stackoverflow.com/questions/31579421/gulp-src-not-reading-required-json-files-array - 值) (9认同)
  • 在文件系统中,可能总是存在一个共同的基础*吗?即使它是"/".如果gulp从项目目录的根目录运行,你只需指定当前目录作为基数,并将管道指向当前目录.`gulp.src(mixed,{base:"."}).pipe(doStuff).pipe(dest("."))` (4认同)