Кто-то уже слышал, кто-то ещё услышит, что Андрей Ситник порекомендовал переезжать с PostCSS на Lightning CSS. Очередная тулза в экосистеме, написанная на Rust. В наших рабочих сборках она уже появилась (под флагом), и вот захожу я в зависимости и вижу:



lightningcss

lightningcss-darwin-arm64





Прикольно. Это тебе не node-pre-gyp выкачивающий готовые билды с S3 и ломающийся на твоём защищённом от внешнего мира CI. А как так сделали?



Довольно изящно. У пакета прописаны опциональные зависимости от бинарников



"optionalDependencies": {

"lightningcss-darwin-x64": "1.21.5",

"lightningcss-linux-x64-gnu": "1.21.5",

"lightningcss-win32-x64-msvc": "1.21.5",

"lightningcss-darwin-arm64": "1.21.5",

"lightningcss-linux-arm64-gnu": "1.21.5",

"lightningcss-linux-arm-gnueabihf": "1.21.5",

"lightningcss-linux-arm64-musl": "1.21.5",

"lightningcss-linux-x64-musl": "1.21.5"

}



У каждого такого пакета с бинарником в package.json указана операционная система и архитектура:

ightning CSS. Очередная тулза в экосистеме, написанная на Rust. В

Так как зависимости указаны опциональными, то npm при их установке тихо отстреливает те, что сфейлились.





npm verb reify failed optional dependency /Users/melikhov/test/node_modules/lightningcss-darwin-x64

npm sill reify mark deleted [ '/Users/melikhov/test/node_modules/lightningcss-darwin-x64' ]





И остаётся только та, что нужна (в моём случае `lightningcss-darwin-arm64`).