You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pug中如何检测传入参数是否为mixin类型以避免代码报错

问题根因:Pug的执行顺序差异

Pug的模板执行逻辑分阶段,才会出现你遇到的两种写法效果不同的情况:

  1. 顶层非函数/非mixin内的代码,会和mixin注册流程同步执行。你直接在模板根节点写if pug_mixins['myMixin']的时候,myMixin的定义还没完成挂载到pug_mixins全局对象上,自然检测不到,所以输出404。你最开始直接打印pug_mixins为空也是同样的原因,打印动作发生在mixin注册完成前。
  2. 你把检测逻辑封装在typeCheck函数里,调用时机是在myMixin2执行的时候,这时候整个模板所有的mixin都已经完成注册,pug_mixins对象已经包含了所有定义好的mixin,所以检测逻辑可以正常生效。至于你写错mixin名时报错能读到pug_mixins,也是因为报错发生在所有mixin注册完成后的调用阶段,和打印的时机不一样。

可用的检测实现方案

就用你已经验证通过的封装逻辑即可,也可以简化成更通用的调用mixin的工具mixin:

// 通用mixin检测调用工具
mixin useMixin(name, ...args)
  - if (pug_mixins[name])
    +#{name}(...args)
  - else
    p 无效的mixin:#{name}

// 测试用的mixin
mixin test(text)
  div 调用成功:#{text}

// 使用示例
+useMixin('test', '测试参数') // 正常调用test mixin
+useMixin('notExist') // 输出无效提示

注意点:

  • 检测逻辑必须封装在函数/其他mixin内部,在实际调用的阶段执行,不要在顶层执行
  • 入参需要传mixin的字符串名称,不要直接传未定义的标识符
  • 动态调用的语法+#{name}()要确保name是字符串类型,避免语法错误

内容的提问来源于stack exchange,提问作者Aybak3k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 15:06:00