【发布时间】:2016-05-18 20:18:59
【问题描述】:
我遇到了一个奇怪的问题,我不确定我的问题出在哪里。可能是因为我对节点流或vinyl-fs的一些基础知识缺乏了解。
不管怎样,这里是描述:
我正在构建我想与 gulp 一起使用的不同脚本。
例如,这个正在构建我需要的一些资产;更准确地说,我将引导源文件从 node_modules 复制到我的资产文件夹。
这个函数应该返回一个promise,这样我可以更容易地用gulp来使用它。
这是完成这项工作的 sass-bootstrap.js 文件:
- 这是一个较短的版本,之前有一些检查,但与我的问题无关。
- 假设所有变量都已定义。
var defer = Q.defer(),
vinylFs = require( 'vinyl-fs' ),
map = require( 'map-stream' );
function sass_bootstrap() {
var defer = Q.defer();
vinylFs.src( [ bootstrap_sass_route + '/**/_*.scss' ] )
.pipe( vinylFs.dest( assets_sass_bootstrap ) )
.pipe( map( function( file, cb ) {
cb( null, file );
}))
.on( 'end', function(){
defer.resolve();
});
return defer.promise;
}
这是使用它的 gulp 任务:
- 又是一个简化版本,仅包含相关代码
gulp.task( 'development', function ( cb ) {
sass_bootstrap()
.then( function(){
cb();
})
.catch( function( err ){
err.log();
cb();
});
});
这很好用,但我不太明白为什么它不能这样工作:
function sass_bootstrap() {
var defer = Q.defer();
vinylFs.src( [ bootstrap_sass_route + '/**/_*.scss' ] )
.pipe( vinylFs.dest( assets_sass_bootstrap ) )
.on( 'end', function(){
defer.resolve();
});
return defer.promise;
}
此外,我不明白为什么我需要致电map()。我认为在我的第一个示例中根本不需要...
任何提示或解释将不胜感激。
谢谢!
【问题讨论】:
-
您使用的是哪个版本的vinyl-fs?存在 vfs.dest 没有结束(但 map-stream 会)的(已修复)问题:github.com/gulpjs/vinyl-fs/issues/120。目前还没有带有此标签的版本,但请尝试 package.json 中的 master 分支。
标签: javascript node.js promise q