vite: library mode can't extract static assets
Describe the bug
while in library mode, exec yarn build, the static assets is inline into css file, but what i want is to remain assets alone.
Reproduction
- yarn create @vitejs/app vite-demo --template react
- replace
imgwithdivinApp.tsx, and removesrcattribute
<div className="App-logo" />
- add
background-image: url(facivon.svg)for.App-logoclassname inApp.css
.App-logo {
height: 40vmin;
pointer-events: none;
background-image: url(t.jpeg);
}
- edit
vite.config.json
import { defineConfig } from 'vite';
import path from 'path';
import reactRefresh from '@vitejs/plugin-react-refresh';
// https://vitejs.dev/config/
export default defineConfig({
plugins: [reactRefresh()],
build: {
assetsInlineLimit: 0,
lib: {
entry: path.resolve(__dirname, './src/main.tsx'),
name: 'demo',
},
},
});
-
exec
yarn build -
output
dist
├── style.css
├── vite-demo.es.js
└── vite-demo.umd.js
what i expect is that there is a favicon.svg file in dist directory
About this issue
- Original URL
- State: open
- Created 3 years ago
- Reactions: 58
- Comments: 27 (3 by maintainers)
Commits related to this issue
- feat: build library new option - emitAssets #4454 #3295 — committed to torsteinringnes/vite by torsteinringnes 3 years ago
- Merge branch 'vitejs:main' into fix-#3295 — committed to torsteinringnes/vite by torsteinringnes 3 years ago
- Merge pull request #1 from torsteinringnes/fix-#3295 Fix #3295 — committed to torsteinringnes/vite by torsteinringnes 3 years ago
- Merge branch 'vitejs:main' into fix-#3295 — committed to torsteinringnes/vite by torsteinringnes 3 years ago
- Merge branch 'vitejs:main' into fix-#3295 — committed to torsteinringnes/vite by torsteinringnes 3 years ago
Any updates?
Can we have an option that enables emitting assets separately in lib mode?
I wrote a plugin to extract static assets in library mode: vite-plugin-lib-assets
usage:
Any updates on this?
I think the suggestion from the Vite team would be to use a
publicdirectory.Say you have the file
/public/cool-font.woffthat was included in your Vue component library:Configured like this, the file will not be inline, but there’s one other catch. The
publicdirectory needs to be published with the package. So thepackage.jsonwould be updated:Now whatever environment the
cool-packageis included in can handle packing/vite/rollup of the static assets however it needs too.I would really like this as well. Curious, why is this not supported in “lib” mode? Must be a reason.
I have a solution: move assets to another package
This problem has been bothering me for a long time. Is there any update?
Anyone? Why is there a difference from standard, when using lib mode?
This might not be related to this, but what about web workers? I’m unable to use web workers in library mode as well. It builds fine, but doesn’t bundle the worker with it.
+1
Please, allow this for ‘es’ libs. Thanks 😃 . Bundle with svg files inlined , why?
This would also be cool for json files.
I was using library mode so I could get
iifeandumdbuilds, but I still wanted the static assets to be separate from the bundle.I ended up digging into the
rollupOptionsinstead, myvite.config.jsis similar to this:Nice! Static resources will not be converted to BASE64, but converted to require relative path reference, the problem is perfectly solved.
It should be noted that when using the package by
@laynezh/vite-plugin-lib-assets, your app needs to support the related loaders or plugins about the used static resources.