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
img
withdiv
inApp.tsx
, and removesrc
attribute
<div className="App-logo" />
- add
background-image: url(facivon.svg)
for.App-logo
classname 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
public
directory.Say you have the file
/public/cool-font.woff
that was included in your Vue component library:Configured like this, the file will not be inline, but there’s one other catch. The
public
directory needs to be published with the package. So thepackage.json
would be updated:Now whatever environment the
cool-package
is 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
iife
andumd
builds, but I still wanted the static assets to be separate from the bundle.I ended up digging into the
rollupOptions
instead, myvite.config.js
is 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.