如何在Vite-React项目npm构建时移除@license注释(将手动添加)
解决Vite构建中Firebase重复@license注释的问题
方案1:通过Esbuild直接移除所有法律注释
Vite默认使用Esbuild进行生产构建,你可以通过配置legalComments选项直接移除所有包含@license的注释:
修改你的vite.config.js/vite.config.ts:
import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], build: { esbuild: { // 完全移除所有法律相关注释(包括重复的@license) legalComments: 'none' } } });
这个方式最简单,适合你仅自用的场景,之后可以手动添加唯一的许可证声明到构建产物中。
方案2:用Terser精细控制,只保留一份@license注释
如果需要保留至少一份许可证注释而移除重复项,可切换到Terser压缩器(Esbuild暂不支持合并重复注释):
- 先安装Terser依赖:
npm install -D terser
- 修改Vite配置,启用Terser并自定义注释过滤逻辑:
import { defineConfig } from 'vite'; import react from '@vitejs/plugin-react'; export default defineConfig({ plugins: [react()], build: { minify: 'terser', terserOptions: { output: { comments: (node, comment) => { // 仅保留首次出现的@license注释,后续重复的直接移除 if (comment.type === 'comment2' && comment.value.includes('@license')) { if (!globalThis._hasLicense) { globalThis._hasLicense = true; return true; } return false; } // 如需保留其他类型注释可调整此处,否则返回false移除所有其他注释 return false; } } } } });
注意事项
- 你的原有构建命令
vite build --emptyOutDir --base=./无需修改,配置生效后直接执行即可。 - 由于你是仅供自用,移除/合并注释不存在合规问题;若后续需要分发项目,记得手动添加完整的唯一许可证声明。
内容的提问来源于stack exchange,提问作者SKB_BGPL
相关产品推荐
相关产品推荐

