我正在尝试运行以下代码var $ = require('gulp-load-plugins')({ lazy: true }); // fetches gulp plugins
gulp.task('wiredep', function () {
var wiredep = require('wiredep').stream;
return gulp
.src(config.index)
.pipe(wiredep(config.wiredepDefaultOptions)) //wiredep injection configuration
.pipe($.inject(gulp.src(config.js))) //custom js files configuation
.pipe(gulp.dest(config.client))
});
/* inject bower and other injections */
gulp.task('inject', ['styles-compile', 'wiredep'], function () {
return gulp
.src(config.index)
.pipe($.inject(gulp.src(config.css)))
.pipe(gulp.dest(config.client))
});
//如果我注释以下行
.pipe($.inject(gulp.src(config.css)))
然后我的 .js 文件被注入(inject),否则它们不会注入(inject),据我所知,这种注入(inject)是并行发生的。
我究竟做错了什么?
最佳答案
gulp-inject
只会注入(inject)一组文件,每次调用时都会用新集替换旧集。有两种方法可以解决问题。
1) 来自gulp-inject
github页面:使用event-stream
插件将两个文件名流(.css 和 .js)组合成一个流,您可以将其传递给注入(inject)。
var es = require('event-stream'),
inject = require('gulp-inject');
// Concatenate vendor scripts
var vendorStream = gulp.src(['./src/vendors/*.js'])
.pipe(concat('vendors.js'))
.pipe(gulp.dest('./dist'));
// Concatenate AND minify app sources
var appStream = gulp.src(['./src/app/*.js'])
.pipe(concat('app.js'))
.pipe(uglify())
.pipe(gulp.dest('./dist'));
gulp.src('./src/index.html')
.pipe(inject(es.merge(vendorStream, appStream)))
.pipe(gulp.dest('./dist'));
2) 可能更适合您当前代码组织的替代解决方案是使用
gulp-inject
name
参数来定义两个不同的注入(inject)位置。因此,您有一个像这样的头文件:<!DOCTYPE html>
<html>
<head>
<title>My index</title>
<!-- styles:css -->
<!-- the styles files will be injected here -->
<!-- endinject -->
</head>
<body>
<!-- scripts:js -->
<!-- the scripts files will be injected here -->
<!-- endinject -->
</body>
</html>
然后你的
gulpfile.js
包含类似:var inject = require('gulp-inject');
gulp.src('./src/index.html')
.pipe(inject(gulp.src('./config.css'), {name: 'styles'}))
.pipe(inject(gulp.src('./config.js'), {name: 'scripts'}))
.pipe(gulp.dest('./dist'));
关于Gulp 不能同时注入(inject) css 和 js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32599473/