DEBUG.WIKI
京东云;让 AI 进入真实业务;零售 · 物流 · 客服 · 硬件;查看方案 →
ZgoCloud:多地区部署,按需选节点;日本、美国、香港、德国
Evoxt;最高 6.0GHz CPU;高频云服务器 · 免费每周备份;查看配置 →

Vite license 文件出现 0.0.0,检查依赖内部的 package.json 标记

Vite license 输出中的 0.0.0 可能来自包内部类型标记被误当包根。8.3.4 已含包根识别处理,需核对真实依赖版本与许可读取结果。

启用 Vite 的 build.license 后,生成文件列出了依赖名字,却把版本写成 0.0.0,同时缺少许可标识或正文,可以先检查包内部有没有额外的 package.json。项目安装的真实版本可能完全正确,出错的是构建器给模块归属的包边界。

一种已确认的布局是双 ESM/CJS 包在子目录放置类型标记。例如 engine.io-client 的真实包根记录 6.6.3、MIT 与许可文件,build/esm/package.json 却只有 name、type、browser 等字段。受影响查找遇到这个带 name 的内部标记便停止,license 生成器拿到缺少版本和许可信息的对象,默认版本就成了 0.0.0。

具体报告涉及 Vite 7.3.1 及 Vite 8 的对应构建路径,使用 socket.io-client 与其传递依赖作为例子。Vite 8 的确切小版本没有在该处完整列出,不能补成某一个版本,更不能认定所有缺许可文本的包都由内部标记造成。

先比较生成条目与真实安装包:

npm ls vite socket.io-client engine.io-client engine.io-parser

再查看该模块实际落到哪个文件,以及那个文件向上到包根之间的 package.json。需要区分真实 node_modules 包根与包内部用来声明模块类型的目录。不要直接删除内部标记,它可能决定 .js 文件如何被解释,会影响正常加载。

Vite 8.3.4 的正式代码会在 node_modules 中继续越过不是实际包根的内部标记,再取得包级元数据。若项目可以迁移到这个已包含处理的版本,可在分支进行:

npm install -D vite@8.3.4
npm ls vite
npm run build

升级 Vite 主版本前,仍要核对 Node 与插件支持范围;7.x 项目不能只替换版本号而跳过迁移验收。这里不把 8.3.4 称为这项问题的全球首次修复版。

保留原本的 license 配置,例如:

import { defineConfig } from 'vite';
export default defineConfig({
  build: {
    license: { fileName: 'license.md' },
  },
});

重新构建后,对照输出中的依赖版本与实际包根版本,检查许可标识及包提供的许可正文是否被正确读入。socket.io-client 的例子还需逐项检查传递依赖,不能只看最外层包恢复就认为每条记录都完整。

若真实包根本身没有版本或许可信息,正确找到包根也不会凭空生成它;应进一步检查包内容、发布元数据与输出配置。0.0.0 消失也不等于项目已满足所有授权义务,这里验收的是构建元数据归属与读取结果,不能把生成器的一份文件当成完整法律结论。