异常原因
今天在升级Dify版本的时候发现低版本的ios手机出现了以下报错:
SyntaxError: Invalid regular expression: invalid group specifier name
Error: Invalid regular expression: invalid group specifier name
Call Stack
46
eval
[native code] (0:0)
./node_modules/.pnpm/[email protected]/node_modules/mdast-util-gfm-autolink-literal/lib/index.js
经过排查发现是Safari浏览器在ios手机低于16.3版本的时候不支持正则表达式的零宽断言。
参考原因:
- 相关链接:git issues
3.相关链接: ios safari 正则兼容问题
解决方式
排查我的异常报错日志,是引用的一个包mdast-util-gfm-autolink-literal/
造成的
./node_modules/.pnpm/[email protected]/node_modules/mdast-util-gfm-autolink-literal/lib/index.js
去git找相关的issues发现有人反馈过:
地址:iOS 和 Safari 版本 <16.4 中新的"负向后视"正则表达式中断
但是官方在此版本并不打算兼容低版本的标准,给出的建议也是使用Babel转译
所以到此有2个解决方案。
方案一:Babel转译配置
1. Babel转译配置
添加Babel插件以转换命名捕获组:
npm install --save-dev @babel/plugin-transform-named-capturing-groups-regex
在babel.config.js中:
module.exports = {
plugins: ['@babel/plugin-transform-named-capturing-groups-regex']
};
2. 强制转译node_modules中的依赖
修改构建配置,确保相关依赖被Babel处理:
// webpack.config.js 或类似配置
module.exports = {
module: {
rules: [
{
test: /\.js$/,
include: /node_modules\/mdast-util-gfm-autolink-literal/,
use: {
loader: 'babel-loader',
options: {
plugins: ['@babel/plugin-transform-named-capturing-groups-regex']
}
}
}
]
}
};
重新编译
方案二:降级
mdast-util-gfm-autolink-literal在2.0.0的时候没有这个问题,如果可以选择降级的可以指定2.0.0版本
执行降级命令
pnpm install [email protected]
重新启动验证。
我使用降级后就不再报错了。