honey-css-modules/ADR/import specifier の resolve は alias によるもののみサポートする
ステータス
Accepted (2024/11/24)
背景
happy-css-modules では@importや@valueで他の CSS Module からトークンを import する時に、様々な形式の resolve をサポートしていた
code:import-specifiers.module.css
@import './a.module.css';
/* '/project/a.module.css' に resolve される */
@import 'a.module.css';
/*
* Vite で resolve.alias オプションに { '@': './src' } を設定していた場合、
* /project/src/a.module.css に resolve される。
*/
@import '@/a.module.css';
/*
* node_modules/bootstrap/package.json に書いてある内容をもとに、
* 解決先が決まる。様々なルールがあるが、bootstrap の場合は
* package.json の style field に書かれている
* /project/node_modules/bootstrap/dist/css/bootstrap.css へと resolve される。
*/
@import '~bootstrap';
ところで honey-css-modules では、@importや@value文の補完をできるようにしたい
importedと書いてCtrl+Spaceを押したら、@value imported from './b.module.css';をエディタが補完するようにしたい
しかし、もし honey-css-modules が import specifier の resolve をサポートしていると、import specifier をどう補完すべきか曖昧になる
./b.module.cssにするべきか
b.module.cssにするべきか
@/b.module.cssにするべきか
この問題を回避したい
決定事項
import specifier の resolve は alias によるもののみサポートする
よく使われる alias のみをサポートし、ほかは実装の簡略化のためにサポートしない
可能であれば tsserver のtypescript.preferences.importModuleSpecifier相当のオプションを honey-css-modules に実装する
import alias を優先するかどうかを決められるオプションのこと