npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@finzor-ui/vite-plugin

v0.5.12

Published

Vite plugin for Finzor UI: optimizeDeps, SSR noExternal, theme bootstrap, and Nuxt module.

Readme

@finzor-ui/vite-plugin

Плагин (и Nuxt-модуль), который подключает Finzor UI к Vite так, чтобы dev/SSR/first paint работали без ручной возни с optimizeDeps, ssr.noExternal и anti-FOUC для темы.

Стили компонентов Finzor не инжектит: они едут сами через module graph (import { FButton } from '@finzor-ui/button' → CSS чанка). Foundation по-прежнему один раз в приложении:

import '@finzor-ui/core/style.css'

Поддержка: Vite ^5 || ^6 || ^7 || ^8, пакеты @finzor-ui/* и @finzor-ui-pro/*.


Зачем он нужен

Без адаптера типичные сбои при работе с kit:

| Симптом | Причина | Что делает плагин | | -------- | ------- | ----------------- | | Медленный / нестабильный cold start в dev | Vite не знает, какие Finzor-пакеты prebundle’ить | Сканирует импорты приложения и пишет optimizeDeps.include | | В SSR/Nuxt нет стилей Finzor на first paint | Vite считает пакеты external и не достаёт CSS side-effects | При ssr: true (и в Nuxt-модуле) мержит ssr.noExternal для Finzor scopes | | Мигание светлой/тёмной темы до гидрации | <html> ещё без data-color-scheme / class | Опционально выставляет attrs + blocking script до paint | | Тихие ошибки «пакет не резолвится» / конфликт версий | Забыли установить / разные ranges в deps и devDeps | Warn-only проверки на старте сборки |

Когда можно обойтись без плагина: простой SPA, где вас устраивает дефолтный Vite, нет SSR и нет persist color-scheme. Стили компонентов всё равно приедут из module graph + core/style.css.

Когда ставить: Vite SSR, Nuxt, или SPA, где нужны prebundle, anti-FOUC тема или ранние предупреждения по зависимостям.

Модель доставки CSS / SSR

| Режим | CSS | |-------|-----| | SPA | Module graph (достигнутые entry/chunks) + @finzor-ui/core/style.css | | Vite SSR / Nuxt | то же + ssr.noExternal для scopes @finzor-ui/* / @finzor-ui-pro/* |

Контракт пакетов Finzor, на который опирается плагин:

  • один изоморфный JS surface (dist/index.js) — нет dist/ssr.js и exports["."].node;
  • CSS компонентов едет side-effect’ами из достигнутых public entry / chunks, не отдельными ./style.css / ./style-all.css;
  • foundation — только import '@finzor-ui/core/style.css' в приложении;
  • без package-closure inject и без prepend транзитивных CSS в index.js.

Эквивалент ручного SSR-конфига (если плагин не используете):

ssr: {
  noExternal: [/@finzor-ui(?:-pro)?\//]
}

Так Vite трансформирует пакеты и вытаскивает CSS side-effects на first paint.


Что плагин делает в проекте

Конкретно при plugins: [vue(), finzorUi(…)] (или Nuxt-модуле):

  1. Сканирует исходники (src по умолчанию; в Nuxt — app, pages, components, …) на root-импорты @finzor-ui/* / @finzor-ui-pro/*.
  2. Пишет optimizeDeps.include для найденных пакетов (+ @finzor-ui/core; в plain Vite по умолчанию ещё union с Finzor-deps из package.json). Tooling-only пакеты без module entry пропускает.
  3. При ssr: true мержит в конфиг:
    ssr: { noExternal: [/@finzor-ui(?:-pro)?\//] }
    (идемпотентно; noExternal: true не трогает).
  4. При theme / colorScheme — first-paint bootstrap на <html> (Vite: transformIndexHtml; Nuxt: app.head).
  5. При validate: true (default) — warn, если пакет не резолвится, explicit-пакет не найден в scan, или один и тот же Finzor-пакет в dependencies и devDependencies с разными ranges.
  6. При analyzeCss / debug — лог размеров dist/*.css по затронутым пакетам.

Чего плагин не делает:

  • не подключает и не prepend’ит CSS-бандлы / style-all / package-closure;
  • не требует отдельный @finzor-ui/*/ssr entry — один изоморфный JS;
  • не заменяет import '@finzor-ui/core/style.css' в entry приложения.

Установка

pnpm add -D @finzor-ui/vite-plugin

Быстрый старт

Vite SPA

// vite.config.ts
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { finzorUi } from '@finzor-ui/vite-plugin'

export default defineConfig({
  plugins: [vue(), finzorUi()]
})
// main.ts
import '@finzor-ui/core/style.css'
import { createApp } from 'vue'
import App from './App.vue'

createApp(App).mount('#app')

Vite SSR

import { finzorUi } from '@finzor-ui/vite-plugin'

export default defineConfig({
  plugins: [vue(), finzorUi({ ssr: true })]
  // noExternal для Finzor выставляет плагин
})

Nuxt

// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@finzor-ui/vite-plugin/nuxt'],
  // опционально:
  // finzorUi: { colorScheme: 'system', theme: 'corporate' }
})

Модуль сам включает ssr.noExternal, optimizeDeps (scan-first) и прокидывает те же опции в Vite-плагин. Foundation CSS — в entry / layout приложения, как в SPA.


Опции

| Option | Default | Для пользователя | |--------|---------|------------------| | ssr | false | Включите для Vite SSR. В Nuxt-модуле включается автоматически. | | theme | — | Значение data-theme на <html> до первого paint. | | colorScheme | — | 'light' \| 'dark' \| 'system' — anti-FOUC для цветовой схемы. | | scanDirs | ['src'] / Nuxt dirs | Куда смотреть static-импорты Finzor. | | includePackageJsonDeps | true (Vite) / false (Nuxt) | Добавлять Finzor из package.json в optimizeDeps roots. | | validate | true | Warn-only проверки зависимостей. | | analyzeCss / debug | false | Диагностика CSS/roots в консоли. | | packages | 'auto' | Явный список пакетов для validate/analyze. | | colorMode | false | Только Nuxt: opt-in sync с @nuxtjs/color-mode (Finzor = DOM driver). | | messages | false | Только Nuxt: глобальные defaults для @finzor-ui/messages через setConfig. |

Полные типы — в src/types.ts.


Anti-FOUC: тема и color scheme

Если пользователь может переключать светлую/тёмную схему (и тем более с persist), одного runtime FApp мало: до JS страница может мигнуть «не той» схемой.

Плагин при colorScheme:

  1. Ставит на <html> data-color-scheme + compat class light|dark (для system в статике — fallback light).
  2. Вставляет blocking script: читает localStorage['finzor-ui-color-scheme-preference'], иначе fallback из опции, резолвит system через matchMedia, пишет attr + class + style.colorScheme до paint.
// nuxt.config.ts
export default defineNuxtConfig({
  modules: ['@finzor-ui/vite-plugin/nuxt'],
  finzorUi: {
    colorScheme: 'system'
  }
})
<!-- runtime: FApp — writer; select без своего v-model на схему -->
<template>
  <FApp color-scheme="system" persist-color-scheme>
    <FColorSchemeSelect />
  </FApp>
</template>

finzorUi.colorMode (если подключён @nuxtjs/color-mode) — follower для $colorMode; DOM по-прежнему ведёт Finzor.


API

| Import | Когда | | ------ | ----- | | finzorUi из @finzor-ui/vite-plugin | Vite / Vite SSR | | default / module из @finzor-ui/vite-plugin/nuxt | Nuxt (configKey: 'finzorUi') |

Корневой пакет также экспортирует низкоуровневые helpers (mergeFinzorSsrNoExternal, scan/optimize/bootstrap utils и т.д.) — для тестов и нестандартного wiring. В обычном приложении достаточно finzorUi или Nuxt-модуля.