首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将inline pug svgstore注入到pug中(以前是jade)

将inline pug svgstore注入到pug中(以前是jade)
EN

Stack Overflow用户
提问于 2016-09-09 08:35:58
回答 1查看 1.1K关注 0票数 1

我在用食品店给帕格打针。我让它在标签/注释中注入到一个pug文件中,但它是在html上。如何以pug语法输出?

代码语言:javascript
复制
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'));
});
EN

回答 1

Stack Overflow用户

发布于 2016-11-21 06:14:06

我知道这是几个月前的事了,但实际上我在搜索类似于此的答案时遇到了您的问题,我想出了一个解决方案,我希望它能对您的项目起作用。

因此,您似乎是从gulp svgstore的文档中抓取了代码。首先,你会注意到他们使用的inject标签是用来注入HTML的:

代码语言:javascript
复制
<div class="visuallyhidden">
  <!-- inject:svg --><!-- endinject -->
</div>

为了使其与Pug一起工作,您需要将标记更改为:

代码语言:javascript
复制
.visuallyhidden
  //- inject:svg
  //- endinject

这可能就是您需要的全部内容,但我想分享一些令人垂涎三尺的任务,我使用<symbol>元素将多个SVG组合成一个SVG,然后将这些元素注入到.pug模板中。

步骤

首先,我创建了一个svgstore任务,使用<symbol>标记将多个SVG文件合并到一个SVG中。

代码语言:javascript
复制
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'));
});

我的应用程序的结构是这样的:

代码语言:javascript
复制
app
  |
  +--includes
  |  |
  |  +--svg-defs.pug
  |  +--header.pug
  +--svg
  |  |
  |  +--svg-1.svg
  |  +--svg-2.svg
  +--images
  +--styles
  +--scripts

因此,svg目录中的任何SVG文件都将被合并到一个SVG中。

svg-defs.pug中,我包含了inject标记:

代码语言:javascript
复制
.svg-defs-container.visuallyhidden
  //- inject:svg
  //- endinject

然后,在我的吞咽serve任务中,我必须在我的svg目录中包含一个监视任何.svg更改。

代码语言:javascript
复制
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将我们的pug编译成HTML之前将单个SVG注入到模板中。

代码语言:javascript
复制
gulp.task('views', ['svgstore'], () => {
  return gulp.src('app/*.pug')
    .pipe($.plumber())
    .pipe($.pug({pretty: true}))
    .pipe(gulp.dest('.tmp'))
    .pipe(reload({stream: true}));
});

最后,我在index.pug文件中添加了一个简单的混合:includ./includes/ include -interior.pug

代码语言:javascript
复制
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

    ...

我使用了约曼的generator-webapp来生成我的项目和gulpfile.js。我不得不做一些自定义来让它与Pug一起工作,但如果没有意义,请查看完整的gulpfile

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39402118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档