vitejs / vite

Next generation frontend tooling. It's fast!
http://vite.dev
MIT License
68.99k stars 6.24k forks source link

Extract license info outside of the JavaScript bundle #17892

Open nojaf opened 3 months ago

nojaf commented 3 months ago

Description

This is something between a bug and a feature I guess, but I notice that my JS bundle contains a lot of similar license code comments.

Sample: https://stackblitz.com/edit/vitejs-vite-k6vbhh?file=dist%2Fassets%2Findex-trimmed.js

After removing these with uglify-js I see about 20% file size decrease.

npx uglify-js ./dist/assets/index-DQVm2kVJ.js --output ./dist/assets/index-trimmed.js
-rw-rw-r--  1  staff  staff  475905  Aug  16  14:27  index-DQVm2kvJ.js    
-rw-rw-r--  1  staff  staff  371060  Aug  16  14:32  index-trimmed.js    

While these licenses are important, my average website visitor won't really bat an eye about this.

Suggested solution

I'm wondering if Vite could extract all the comments and place them into a license.txt file and link that in my bundled.js instead.

Alternative

I guess I can do post processing myself to deal with this.

Additional context

The firebase package does seem to bring a lot of very similar Google licenses. So you only have this problem based on what packages you use.

Validations

stackblitz[bot] commented 3 months ago

Fix this issue in StackBlitz Codeflow Start a new pull request in StackBlitz Codeflow.

hi-ogawa commented 3 months ago

I think esbuild is preserving @license comment by default https://esbuild.github.io/api/#legal-comments You can use esbuild.legalComments: "none" to strip all comments:

import { defineConfig } from 'vite';

export default defineConfig({
  esbuild: {
    legalComments: 'none',
  },
});

Probably what you want is esbuild.legalComments: "linked", but unfortunately this is not supported for Vite build since Vite uses esbuild to trasnform individual ~files~ chunks.

Not sure but maybe you can try other plugins to get back the licenses separately not from the code comment? something like https://github.com/mjeanroy/rollup-plugin-license

Ada541 commented 3 months ago

okay

bluwy commented 3 months ago

I'm personally inclined to mark this as an enhancement since it would be a nice default for Vite to auto manage and emit licenses when building apps.