为什么我的Gulp任务中Wiredep报错“dest.on不是一个函数”?

5

我正在尝试在Gulp任务中使用Wiredep将Bower依赖项注入到我的index.html文件中。以下任务(不含Wiredep)可以正常运行。

gulp.task('build', ['copy', 'assets'], function(){

    return gulp.src('app/index.html')
    .pipe(inject(gulp.src(['dist/assets/js/*.js', 'dist/assets/css/*.css'], {read: false}), {relative: true}))
    .pipe(gulp.dest('dist'));
});

现在我尝试将Wiredep添加到其中:
var wiredep = require('wiredep');

gulp.task('build', ['copy', 'assets'], function(){

    return gulp.src('app/index.html')
    .pipe(wiredep())
    .pipe(inject(gulp.src(['dist/assets/js/*.js', 'dist/assets/css/*.css'], {read: false}), {relative: true}))
    .pipe(gulp.dest('dist'));
});

这导致:
[09:45:11] TypeError: dest.on is not a function
    at DestroyableTransform.Readable.pipe (C:\GIT\myApp\myApp-front\node_module
s\gulp-debug\node_modules\through2\node_modules\readable-stream\lib\_stream_read
able.js:533:8)
    at Gulp.<anonymous> (C:\GIT\myApp\myApp-front\gulpfile.js:38:6)
    at module.exports (C:\GIT\myApp\myApp-front\node_modules\gulp\node_modules\
orchestrator\lib\runTask.js:34:7)
    at Gulp.Orchestrator._runTask (C:\GIT\myApp\myApp-front\node_modules\gulp\n
ode_modules\orchestrator\index.js:273:3)
    at Gulp.Orchestrator._runStep (C:\GIT\myApp\myApp-front\node_modules\gulp\n
ode_modules\orchestrator\index.js:214:10)
    at C:\GIT\myApp\myApp-front\node_modules\gulp\node_modules\orchestrator\ind
ex.js:279:18
    at finish (C:\GIT\myApp\myApp-front\node_modules\gulp\node_modules\orchestr
ator\lib\runTask.js:21:8)
    at C:\GIT\myApp\myApp-front\node_modules\gulp\node_modules\orchestrator\lib
\runTask.js:52:4
    at f (C:\GIT\myApp\myApp-front\node_modules\gulp\node_modules\orchestrator\
node_modules\end-of-stream\node_modules\once\once.js:17:25)
    at DestroyableTransform.onend (C:\GIT\myApp\myApp-front\node_modules\gulp\n
ode_modules\orchestrator\node_modules\end-of-stream\index.js:31:18)

我尝试直接从命令行使用Wiredep,结果运行良好。 我的操作系统是Windows,Node版本为v4.2.2。

编辑 如果有人遇到同样的问题,则解决方法是将任务更改为:

gulp.task('build', ['copy', 'assets'], function(){
    wiredep({src:'dist/index.html'});

    return gulp.src('dist/index.html')
    .pipe(inject(gulp.src(['dist/assets/js/*.js', 'dist/assets/css/*.css'], {read: false}), {relative: true}))
    .pipe(gulp.dest('dist'));
});

请注意,在注入之前,index.html将被复制到dist目录中。
我仍然想知道为什么不能使用流来连接依赖项。
1个回答

13

我自己也遇到了这个问题。这是因为你导入wiredep的方式有问题。为了使其作为gulp流的一部分进行传递,你需要执行以下操作:

var wiredep = require('wiredep').stream;

排除 .stream 部分可以让你在 gulp 流之外使用 wiredep 作为一个函数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接