【问题标题】:Pug JS variable passingPug JS 变量传递
【发布时间】:2017-06-18 15:51:26
【问题描述】:

您好,我在将变量从 gulp 传递到 pug 然后再传递到过滤器时遇到问题。我像这样传递变量。

gulp.task('pug-wp', function () {
return gulp.src('src/templates/*.pug')
.pipe(pug({
        pretty: true,
        filters: {
            php: pugPHPFilter
        },
        data: { 
           development: 'php'
        }
    }))
 .pipe(rename({
    extname: ".php"
  }))
  .pipe(gulp.dest(outputPath))
  .pipe(browserSync.stream());

然后我想在

中使用它
:php(type=development)

我有错误提示

msg: "development" is not constant. All filters are rendered compile-time so                                      filter options must be constants.

【问题讨论】:

    标签: javascript gulp pug pugjs


    【解决方案1】:

    过滤器确实已编译,因此过滤器属性中没有表达式,这不是标签元素的属性,这都是静态的,但你可以使用这个技巧:

    case development
      when 'php'
        :php(type='php')
      when 'foo'
        :php(type='foo')
      when 'bar'
        :php(type='bar')
    

    或者如果developement变量只依赖于环境,就动态通过过滤器:

    switch (developement) {
      case 'php':
        pugPHPFilter.setSomeDefaultOption({ type: 'php' });
        break;
      case 'foo':
        pugPHPFilter.setSomeDefaultOption({ type: 'foo' });
        break;
    }
    .pipe(pug({
        pretty: true,
        filters: {
            php: pugPHPFilter
        }
    }))
    

    setSomeDefaultOption 是一个示例,请参阅您的pugPHPFilter 以找到等效功能。

    【讨论】:

    • 有没有办法将变量传递给严格的过滤器?
    • 现在,你不能,它不可靠,就像期待哈巴狗能看到未来一样。如果不需要,pug 开发人员不会将此错误放入引擎中。
    • 感谢您的帮助,我通过使用不同过滤器创建两个任务来通过此过滤器,其中一个过滤器用于 php,另一个用于 html。
    • 如果变量只依赖环境,确实是最好的办法。我根据你的观点进行编辑。
    猜你喜欢
    • 2016-10-28
    • 2021-12-31
    • 2018-03-17
    • 2017-05-22
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    相关资源
    最近更新 更多