我正在使用gulp-store注入哈巴狗。我把它注入到标签/评论中的pug文件中,但它是在html上。如何用pug语法输出?
var gulp = require('gulp');
var svgstore = require('gulp-svgstore');
var inject = require('gulp-inject');
var pug = require('gulp-pug');
gulp.task('default', function () {
var svgs = gulp
.src('src/*.svg')
.pipe(svgstore({ inlineSvg: true }));
function fileContents (filePath, file) {
return file.contents.toString();
}
return gulp
.src('src/svg.pug')
.pipe(inject(svgs, { transform: fileContents }))
.pipe(gulp.dest('src'));
});
答案 0 :(得分:1)
我知道这已经有几个月了,但是当我在寻找类似的答案时,我确实遇到了你的问题,我想出了一个我希望可以为你的项目工作的解决方案。
所以你似乎从gulp-svgstore的文档中获取了该代码。首先,你会注意到他们使用的注入标签是用于注入HTML:
<div class="visuallyhidden">
<!-- inject:svg --><!-- endinject -->
</div>
为了使其与Pug一起使用,您需要将标记更改为:
.visuallyhidden
//- inject:svg
//- endinject
这可能就是您所需要的,但我想分享一些gulp任务,我曾使用<symbol>
元素将多个SVG组合到一个SVG中,然后将其注入.pug
模板。
首先,我创建了一个svgstore
任务,使用<symbol>
标记将多个SVG文件合并到一个SVG中。
gulp.task('svgstore', () => {
var target = gulp.src('app/includes/svg-defs.pug');
var source = gulp.src('app/svg/*.svg')
.pipe($.svgmin())
.pipe($.svgstore({inlineSvg: true}));
function fileContents(filePath, file) {
return file.contents.toString();
}
return target
.pipe($.inject(source, {transform: fileContents}))
.pipe(gulp.dest('app/includes'));
});
我的应用程序结构如下:
app
|
+--includes
| |
| +--svg-defs.pug
| +--header.pug
+--svg
| |
| +--svg-1.svg
| +--svg-2.svg
+--images
+--styles
+--scripts
因此,svg
目录中的任何SVG文件都将合并为一个SVG。
在svg-defs.pug
中我添加了注入标记:
.svg-defs-container.visuallyhidden
//- inject:svg
//- endinject
然后在我的gulp serve
任务中,我必须为.svg
目录中的任何svg
更改添加一个监视。
gulp.task('serve', ['views', 'styles', 'scripts', 'fonts'], () => {
...
gulp.watch('app/svg/*.svg', ['svgstore']);
gulp.watch('app/data.json', ['views']);
gulp.watch('app/**/*.pug', ['views']);
gulp.watch('app/styles/**/*.scss', ['styles']);
gulp.watch('app/scripts/**/*.js', ['scripts']);
gulp.watch('app/fonts/**/*', ['fonts']);
gulp.watch('bower.json', ['wiredep', 'fonts']);
});
我还必须修改views
任务,以便在任何逻辑运行之前运行svgstore
。这是因为我们希望在gulp将我们的哈巴狗符合HTML之前将单个SVG注入我们的模板。
gulp.task('views', ['svgstore'], () => {
return gulp.src('app/*.pug')
.pipe($.plumber())
.pipe($.pug({pretty: true}))
.pipe(gulp.dest('.tmp'))
.pipe(reload({stream: true}));
});
最后,我刚刚在我的include
文件中添加了一个简单的index.pug
:
包括./includes/mixin-interior.pug
doctype html
html.no-js(lang='')
include ./includes/head.pug
body
include ./includes/browser-support.pug
include ./includes/analytics.pug
include ./includes/svg-defs.pug
...
我使用Yeoman的generator-webapp来生成我的项目和gulpfile.js
。我必须做一些自定义才能让它与Pug一起使用,但如果事情没有意义,请查看完整的gulpfile
。