DEBUG.WIKI
晚安云;香港 CN2 ¥15/月
PanstarCloud:部署应用,接入 AI,云服务器与 AI 网关
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →

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 做回归。开发服务器应解析到双美元符号文件,执行其真实导出或副作用;随后分别验证正常不含美元符号的别名、相对导入和生产构建。

若回退工具链,保留已经审查过的相对导入也可以,但不要留下“磁盘重命名了一半、源码仍引用旧名称”的混合状态。开发恢复与正式产物正确需分别确认。