developit / microbundle

📦 Zero-configuration bundler for tiny modules.
https://npm.im/microbundle
MIT License
8.04k stars 362 forks source link

When providing `--css-modules insertHashHere` microbundle will treat all CSS files as CSS modules #876

Open ovflowd opened 3 years ago

ovflowd commented 3 years ago

Microbundle supports providing a custom hash generator name for CSS modules by providing --css-modules insertHashPatternHere (eg.: --css-modules _[hash:base64:5].

The Bug

But then Microbundle will also treat all CSS files as CSS modules, instead of just changing the generated signature of the actual CSS modules.

By the documentation, all CSS files should be considered a CSS module if a flag --css-modules true is provided.

Possibly source of the Bug

The bug seems to originate on https://github.com/developit/microbundle/blob/b1a637486234a2ae784ccf0c512321e2d3efef7c/src/lib/css-modules.js#L8 where it only considers the "should only suffix modules" when the option null is being passed.

The caveats

I suppose the --css-modules flag should only support null, true and false (Default Behaviour (Only when suffix), Enforce AutoCSS modules, Disable CSS modules completely).

Since there is the flag --no-css-modules there should be one for specifying the hash too. For example --css-modules-hash _[hash:base64:5].

This would also avoid confusion since it is not documented in the README that using a custom hash would enforce CSS modules.

I would be more than happy to provide a patch 😄