-
-
Notifications
You must be signed in to change notification settings - Fork 6.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CSS sourcemaps #2830
Comments
I think I stumbled into this a while back 😔 vite/packages/vite/src/node/plugins/css.ts Line 211 in fa85749
the map could be available from the compileCss result a few lines above |
Spent some time on this recently and here's what i found.
Figuring out how to pass on the sourcemaps is different for dev and build, both coming with their own set of challenges. For build it's a lot more difficult as css gets bundled too and sourcemaps have to be updated to reflect that and on top esbuild css minification needs to be accounted for too. One Idea i had about this is to keep the css sourcemap inline as long as possible to avoid having to change any api where currently only Building all of this at once could prove challanging and hard to review, so i suggest to split it into smaller goals, which can be described in more detail separately and implemented on top of each other, for example
and also state which compromises can be made, eg
Would love some more 👀 on this. |
I see there's a |
This commit also makes it possible to import the source SCSS styles from dependent code. Caveats/differences from previous setup: - `dist/tagin.module.min.js` isn't actually minified - see vitejs/vite#6555. - no css sourcemap are generated - see vitejs/vite#2830.
Just come across this issue myself. It sure would be useful if Vite could at least bundle sourcemaps during development (on production, perhaps could be lower priority as sourcemaps usually aren't used anyway). It would actually be better right now if Vite just returned the plain css file and the plain sourcemap file. Some CSS is unlikely to change and doesn't really need to be hot content anyway. |
I noticed in the docs there is a css.devSourcemap option, but when I enabled it, it didn't seem to change anything. Chrome dev tools still didn't recognize my CSS styling as coming from Bootstrap's |
@jez9999 I have used the config you mentioned and for me is working well, generating the source maps and see the
|
With Here's my take on fixing it in dev mode: // packages/rollup-plugin-fix-css-sourcemaps/index.mjs
/**
* Fix css source maps in 3p packages on dev server in vite
* Css files use relative paths to point to source maps but when running dev server these are inlined
*
* @param {string} base
* @return {RollupPlugin}
*
* @example
* ```js
* // vite.config.js
* export default defineConfig(({ command }) => ({
* plugins: [
* command === 'serve' && fixCssSourcemapsPlugin(),
* ],
* })
* ```
*/
export default function fixCssSourcemaps(base = '/') {
const filter = createFilter('node_modules/**/*.css')
const root = process.cwd()
const sourceMapRegExp = new RegExp('/\\*# sourceMappingURL=([^\\s]*) \\*/')
return {
name: 'rollup-plugin-fix-css-sourcemaps',
transform(src, id) {
if (!filter(id) || !sourceMapRegExp.test(src)) {
return
}
// Resolve relative directory from id (ie. /node_modules/@ionic/react/css)
const relativeDir = base + id.slice(root.length + 1, id.lastIndexOf('/'))
return {
code: prependDir(src, relativeDir),
map: null,
}
},
}
/**
* Prepend relative directory to source map pointer
* @param {string} src
* @param {string} dir
* @return {string}
*/
function prependDir(src, dir) {
return src.replace(
sourceMapRegExp,
`/*# sourceMappingURL=${dir}/$1 */`
)
}
} |
I'm wondering about the status here. I'd like to have better support for Vite in Chrome DevTools, since we have some issues on our end that we can certainly improve upon. One of the interesting questions however is CSS sourcemaps with Svelte and Vue. Currently with a trivial Svelte hello world, it seems that Vite generates different Also what's blocking |
There isn't any effects of this in my case: |
Hi Vite Team |
I can't get Vite to generate css.map files either. Is there any progress on this issue? |
This worked for me i am using vite4 with react 18 |
In case anyone is wondering whether prod source maps work with {
cssMinify: "lightningcss",
css: {
lightningcss: {
sourceMap: true,
},
},
} |
So I also come across this today. Since we are using vite I always were wondering why my dev tools stopped properly working. We are using a huge css files. So basically this means I cannot change any style inside the dev tools without breaking the whole application. I am using vite-plugin-ssr (Vike), which luckily injects link tags with my styles. I can fix my dev tools if I remove the vite injected styles, but this solution seems rather hacky and I would like to avoid this. Is there no way to tell vite to inject the parsed css into css files for dev? Wouldn't this also solve the source map issue. I am unsure how vite-plugin-ssr injects the style tags, but maybe it would be worth to look at it? vikejs/vike#1003 (comment) |
Any news? I tested vite 5.3.4, and the problem still seems to persist... Especially since the "sourcemap" property is present and allows generating source maps for JS. There is no reason for CSS to be ignored in this process. Locally, the sourcemaps are present with the However, in our case, we need these CSS source maps during the build to enable debugging in other usage contexts, not just in local development. Essential feature.. |
Clear and concise description of the problem
CSS sourcemaps aren't currently supported, which can make it difficult to track down where a particular style was authored. It would be cool if they were preserved in both build (
<link>
) and dev (<style>
) mode.You can see this with a vanilla app (
npm init @vitejs/app
and choose 'vanilla'), and inspecting the#app
styles in bothdev
andserve
. Indev
:In
serve
:Ideally the top right would say 'style.css' in both cases.
Suggested solution
I don't pretend to know exactly what would be involved, but elsewhere in the codebase
magic-string
is used for a similar purpose. Presumably the relevant plugin is https://github.com/vitejs/vite/blob/main/packages/vite/src/node/plugins/css.ts. I could take a run at it if someone gave me a pointer or two.The text was updated successfully, but these errors were encountered: