manifest.json does not include assets
See original GitHub issueDescribe the bug
Statically imported assets (SVG file in my case) will get bundled and created in the outDir
, but are missing in the generated manifest.json
.
vite.config.js
import { defineConfig } from 'vite';
import legacy from '@vitejs/plugin-legacy';
export default defineConfig({
base: '/static/',
publicDir: 'assets/static/',
build: {
manifest: true,
outDir: 'public/static/',
assetsInlineLimit: 0,
rollupOptions: {
input: 'assets/main.ts',
},
},
plugins: [legacy()],
});
assets/main.ts
import './icon.svg';
manifest.json
{
"assets/main-legacy.ts": {
"file": "assets/main-legacy.dd90b2c6.js",
"src": "assets/main-legacy.ts",
"isEntry": true
},
"assets/main.ts": {
"file": "assets/main.9470b65c.js",
"src": "assets/main.ts",
"isEntry": true
}
}
output files
- main.9470b65c.js
- main-legacy.dd90b2c6.js
- icon.a0d73e22.svg
System Info
vite
version:2.0.5
- Operating System:
Windows 10
- Node version:
12.16.1
- Package manager (npm/yarn/pnpm) and version:
npm 7.5.3
Issue Analytics
- State:
- Created 3 years ago
- Reactions:3
- Comments:20 (6 by maintainers)
Top Results From Across the Web
Symfony Error: "An exception has been thrown during the ...
"An exception has been thrown during the rendering of a template ("Asset manifest file "/../public/build/manifest.json" does not exist.") It ...
Read more >What's assets-manifest.json and how does it work? #6436
The objective of manifest is to create an asset map for tools as per comments in the source code. I am not sure...
Read more >Assets Manifest | Eightshift Development kit
If there is no manifest.json file or you provided the wrong asset name, there will be a descriptive message for you. If you...
Read more >Missing Asset-Manifest.json - WordPress.org
It seems I have a 404 error of a file calling for /asset-manifest.json on my root directory. My host says it could be...
Read more >Using Webpack Encore for your website assets
Webpack Encore is a tool to manage your javascript and css assets. ... To enable it, add the following line to the config/bundles.php...
Read more >Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start FreeTop Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
Top GitHub Comments
Had a look and Vite is already tracking and outputting any assets regardless of their usage so I think it makes sense to expose them in the manifest so those integrating with a backend can take advantage of Vite for processing assets not directly used by Vite.
In my testing importing static assets via
import.meta.glob
is enough for Vite to process them even if not referenced.vite.config.js
src/main.ts
src/main.scss
With the above Vite will process and output files matching the glob
./files/**/*
. The only missing bit is a way to get the final path. Looking atgenerateBundle
the asset chunks are present but not exposed so I propose we add a_assets
entry within the manifest that contains all assets Vite has processed e.g.The
_assets
entry contains assets both used within chunks i.e. fonts and non used assets i.e. those imported via the glob. This is desirable as it then allows you to more easily reference files like fonts for things like generating preload directives and other assets such as favicons or static assets referenced in the frameworks templating language.I’ve quickly modified
vite/packages/vite/src/node/plugins/manifest.ts
to achieve the above but I’m likely missing something.The only thing that isn’t quite right is how css is handled as Vite considers it an asset but the full path is stripped by the time the manifest is generated i.e. instead of
src/main.scss
it appears asmain.css
.I’m not sure if we should remove the CSS properties or try to add the full path back in. If we did it keep it and use the source path it would then be possible to use css as an entry.
This is currently possible (not sure if intentional) but you’d have to remember to reference your css by the file name (
entry.scss
) rather than path (src/entry.scss
) and I’m assuming that relying on filename only will result in conflicts.But by keeping the original path things would work as expected.
To summarise there are two things to look at:
_assets
I feel like a “web bundle manifest” specification/standard would be really helpful. As some already mentioned, I would also assume all files, which end up in the final bundle/dist/build directory, to be present in the manifest.