wxs文件必须放在static目录下,如static/wxs/date.wxs,并用绝对路径引用;其运行环境封闭,不支持date、console、this等,需用内置函数处理日期字符串,输入须兜底防错,且仅微信小程序支持,其他平台需条件编译降级。

uni-app 中 wxs 文件必须放在 static 目录下才能被正确引用
uni-app 编译微信小程序时,wxs 并不支持放在 components 或 pages 子目录里,也不认 src/static 以外的路径。如果你把 filter.wxs 放在 components/my-comp/filter.wxs,编译后会报错 Module not found: Error: Can't resolve './filter.wxs',因为 webpack 不处理 wxs,而微信基础库只从 static 下读取。
实操建议:
播客文章生成器。将音频文字稿、节目链接、摘要笔记转化为结构清晰、适合发布的图文文章。支持多种输出风格(深度解析、精华摘要、对话体重构、社交媒体切片)和多种输出格式(Markdown、微信公众号、知乎、企业内刊)。触发词:播客文章、播客转文章、podcast to article、podcast article
- 统一将所有
wxs文件放在项目根目录的static/wxs/下(如static/wxs/date.wxs) - 在 wxml 中用绝对路径引用:
<wxs src="/static/wxs/date.wxs" module="date"></wxs>,注意开头的/不能省 - 不要尝试用相对路径(如
./date.wxs)或变量拼接路径,wxs 不支持动态加载
filter.wxs 里不能调用 console.log 或访问 this、app 等运行时对象
wxs 是封闭运行环境,和 JS 完全隔离:没有 DOM、没有 console、不能 require 其他 wxs(除非用 module.exports 显式导出并静态引入)、也不能访问页面 data 或 methods。常见错误是想在 wxs 里格式化一个来自 {{ item.time }} 的时间戳,却试图调用 new Date() —— 这会直接报 TypeError: Date is not a constructor。
实操建议:
- 日期处理用
getDate/getYear等内置函数,别碰Date构造器 - 字符串截断用
str.substr(0, n),不是str.slice()(后者不支持) - 需要条件判断时,用三元
a ? b : c,避免写if (...) {...}(wxs 支持 if,但容易因缩进或分号缺失静默失败) - 调试靠
return中间值 + wxml 中临时绑定显示,比如{{ date.format(item.time, 'Y-M-D') || 'debug' }}
在 wxml 中使用 wxs 过滤器要避免 undefined 或类型错误导致渲染中断
wxs 函数一旦抛错(比如传了 null 给 parseInt),整个 wxml 渲染会卡住,对应节点空白,且控制台无提示。例如你写了 utils.price(num) 处理价格,但 num 是空字符串或 undefined,parseInt('') 返回 NaN,后续 .toFixed(2) 就崩了——wxs 里没有 try/catch,也没 Number.isFinite。
实操建议:
- 所有输入参数先做兜底:
num = num || 0,字符串用str = str + ''转成字符串再操作 - 数值计算前用
!isNaN(parseFloat(x)) && isFinite(x)判断(wxs 支持isNaN和isFinite) - 过滤器返回值尽量保持类型一致,比如
price过滤器永远返回字符串"¥19.90",别有时返数字有时返空字符串 - 在 wxml 中加默认值防御:
{{ utils.price(item.price) || '–' }}
uni-app 条件编译下,wxs 只对微信小程序生效,其他平台需降级处理
wxs 是微信专有语法,支付宝、字节、H5 都不识别 <wxs></wxs> 标签。如果你在 uni-app 里全局用了 utils.filter,那么 H5 编译会直接忽略该标签,函数调用变成 undefined,页面白屏或报错。
实操建议:
- 用
#ifdef MP-WEIXIN包住 wxs 引入和使用:<!--#ifdef MP-WEIXIN--> <wxs src="/static/wxs/utils.wxs" module="utils"></wxs><!--#endif-->
- 非微信平台改用 computed 或 filter(vue2)/ setup 中的函数处理,例如在
script里定义formatPrice,并在v-if中切换逻辑 - 不要指望
uni.getSystemInfoSync().platform === 'devtools'在开发时模拟 wxs 行为——它只是平台标识,不提供 wxs 运行环境










