Vite 开发时找不到含 $$ 的文件:检查 package.json imports 通配映射
相对导入正常,package.json 的通配 imports 却把文件名中的两个美元符号变成一个。可先对受影响入口采用相对路径。
开发页报 Failed to resolve import "#test$$.js",文件确实存在,错误解析却去找 test$.js。如果直接写相对导入能够工作,检查 package.json 的通配 imports,不要急着把磁盘文件重命名。
明确触发组合是 Vite 8.3.2,包清单使用 "#*": "./src/*",目标文件名含连续的 $$。这条路径在开发解析失败,生产构建可能正常;两个阶段使用的解析实现不能混为一谈。
{
"type": "module",
"imports": {
"#*": "./src/*"
}
}
例如 src/main.js 导入 #test$$.js,而目标为同目录的 src/test$$.js。通配替换中,字符串替换语义可能把 $$ 处理为单个 $,于是映射后的文件名与真实名称不一致。
从同一个调用文件做对照
先核对错误中的导入字符串、最近的 package.json 和实际文件名。shell 脚本中的美元符号还可能被环境变量展开;如果源码文件已经少了字符,应处理生成源码的那一步,不能归为 Vite 解析问题。
在同一个 src/main.js 中,受影响的入口可以临时改为:
import './test$$.js';
相对路径必须以当前导入文件为基准,这个示例只适用于两者同在 src 目录。保留文件的导出及导入用途,不要用另一个没有副作用的空模块替代。项目若在多个地方通过别名访问该文件,应逐一检查,不能只修页面最先报错的一条。
这项修改绕开通配解析,没有改变文件名。需要保留统一包内别名时,也可评估对该入口使用明确、不依赖通配替换的映射,但须在项目实际解析器组合中核对。不要编辑 node_modules 中的解析器文件作为长期修复。
上游合并不等于当前依赖已有修复
相关解析库有过针对美元符号替换的修改,但使用 Vite 的项目仍需核对锁文件里实际装入的解析库版本,以及 Vite 是否允许该版本。不能仅凭一个合并链接就给所有 Vite 8.3.2 项目宣告问题消失。
保存原清单、锁文件与导入代码,采用后续兼容正式组合时,以原来的 #test$$.js 做回归。开发服务器应解析到双美元符号文件,执行其真实导出或副作用;随后分别验证正常不含美元符号的别名、相对导入和生产构建。
若回退工具链,保留已经审查过的相对导入也可以,但不要留下“磁盘重命名了一半、源码仍引用旧名称”的混合状态。开发恢复与正式产物正确需分别确认。


