@cat-of-summer/st-script

中文文档
1.6.1发布于 2026/11/06MITES Module零依赖构建来源已验证近 30 天下载 2215

Standalone JS classes/components (Modal, App, Typograf , …), shipped as ESM and IIFE/CDN builds.

原始使用文档
文档目录6 节
  1. Development
  2. A. Use via npm
  3. B. Use via CDN
  4. Releasing
  5. Tests
  6. Examples

ST-script

Standalone JavaScript classes / components, authored as ES modules and shipped in two flavours per module:

  • ESM (*.esm.min.js) — for import (npm bundlers, <script type="module">). A module that uses another one imports its ESM file instead of inlining it (app/datepicker → ../mask.esm.min.js, app/form → ../core.esm.min.js), so a project that imports both bundles each class once and Mask.find() sees the masks set by the datepicker.
  • IIFE / global (*.min.js) — for a plain CDN <script defer> (exposes a global named after the module). Self-contained: imported modules are inlined.
ModuleGlobal / elementNotes
modalwindow.ModalModal windows.
typografwindow.TypografНеразрывные пробелы: предлоги, частицы, числа, последнее слово.
cookiewindow.CookieCookie helpers (JSON for non-strings).
corewindow.CoreUtilities (merge, getRandomChars, uuid, plural, escape, copy, download, fetch).
observerwindow.ObserverScroll animations: [state], --progress, stagger, cross.
togglewindow.ToggleState toggler (accordions, switches, hover-menus).
selectwindow.SelectCustom <select> dropdown (hooks, multiple, hover).
maskwindow.MaskInput masks (телефон, дата, карта, ИНН, …).
uploaderwindow.UploaderFile uploader.
validatorwindow.ValidatorField validation ([state], setCustomValidity, hooks).
st_button_widgetwindow.st_button_widgetFloating button widget.
st_links_widgetwindow.st_links_widgetLinks widget.
loaderwindow.LoaderAjax list loader (cards: подгрузка/фильтр/сортировка) via Core.fetch.
appwindow.App, <st-app>Web Component — registers <st-app> on load.
routewindow.RouteURL reactions; SPA mode (history / hash).
app/formwindow.FormForm app config object — register with App.create(form); app is not bundled.
app/datepickerwindow.DatepickerCalendar app config object (masked ДД.ММ.ГГГГ field, range, min/max, inline) — App.create(datepicker); bundles mask, not app.
shapewindow.ShapeShapes from Figma paths (corners keep their size, edges stretch): SVG background + clip-path, per-breakpoint variants.

Документация по каждому модулю — docs/src/<module>/index.js.md, например docs/src/app/index.js.md: директивы шаблона, watch() (в том числе watch(() => выражение, cb) для вычисляемого состояния), nextTick(), передача данных через :attr, вложенные компоненты и подводные камни.

Development

npm install      # installs esbuild, builds dist/ via the prepare script
npm run build    # compile src/ → dist/*.min.js (ESM + IIFE)
node scripts/build.mjs --watch   # rebuild on change

Source layout — every src/**/index.js is a bundle; its folder path becomes the output name:

src/
  index.js                 # aggregate barrel (source only, not built into dist/)
  modal/index.js           # → dist/modal.esm.min.js + dist/modal.min.js
  app/index.js             # → dist/app.{esm.min,min}.js
  app/form/index.js        # → dist/app/form.{esm.min,min}.js
  …

Conventions (scripts/build.mjs relies on these — no script edits to extend):

  • A folder with an index.js is a bundle; drop src/<name>/index.js and it is built automatically into dist/<name>.esm.min.js (ESM) and dist/<name>.min.js (IIFE global, default export exposed as window.<ClassName>, e.g. window.Modal).
  • A file or folder whose name starts with _ is shared content (a partial), imported via import and never built on its own.

dist/ is generated and git-ignored. It is built on npm install (prepare), on npm publish (prepack), and in CI to attach release artifacts.

Every bundle ships with a source map (*.min.js.map, sources embedded). ESM builds link it via //# sourceMappingURL, so DevTools pick it up automatically. IIFE builds carry no link comment: they are often concatenated into a site-wide bundle, where a relative link would 404 — attach the .map in DevTools by hand when debugging. The unminified ESM sources are also published as is: import Modal from '@cat-of-summer/st-script/src/modal/index.js'.

A. Use via npm

Пакет опубликован в публичном npm, токен не нужен:

npm install @cat-of-summer/st-script

Модули импортируются по одному — подключается только нужное:

import Modal from '@cat-of-summer/st-script/modal';
import Cookie from '@cat-of-summer/st-script/cookie';
import Typograf from '@cat-of-summer/st-script/typograf';

const modal = new Modal({ content: '#promo', overlay: true });

Общего barrel-входа в dist/ нет. Весь набор разом доступен только из исходников: import { Modal, Cookie, App } from '@cat-of-summer/st-script/src/index.js'.

Web Component регистрирует себя при импорте:

import App from '@cat-of-summer/st-script/app';
import formConfig from '@cat-of-summer/st-script/app/form';
App.create(formConfig);   // теперь работает <st-app app="form">

B. Use via CDN

<script defer src="https://cdn.jsdelivr.net/npm/@cat-of-summer/st-script/dist/modal.min.js"></script>
<script defer src="https://cdn.jsdelivr.net/npm/@cat-of-summer/st-script/dist/app.min.js"></script>

Releasing

Релиз запускается тегом vX.Y.Z, а не обычным пушем:

git tag v1.1.0
git push origin v1.1.0

Версия пакета берётся из тега при публикации. Поле version в package.json служебное и с номером в npm не совпадает. Актуальная версия — npm view @cat-of-summer/st-script version. Сборку и публикацию выполняет .github/workflows/ci-cd.yml (общий workflow из cat-of-summer/git_toolkit).

Tests

node tests/core.test.mjs      # и остальные tests/*.test.mjs без DOM
npm run build                 # браузерным тестам и tests/build.test.mjs нужен dist/
node tests/build.test.mjs     # ESM импортирует соседние модули, IIFE самодостаточна
node tests/browser.test.mjs   # App, Modal, Uploader, Core, Cookie, Route — нужен Playwright с Chromium

Браузерные тесты удобно гонять в контейнере с Playwright, не ставя его на машину:

docker run --rm -v "$PWD:/repo" -e PLAYWRIGHT_FROM=/path/to/node_modules/     --entrypoint node <playwright-image> /repo/tests/browser.test.mjs

PLAYWRIGHT_FROM — каталог, из которого резолвится пакет playwright, если он стоит не в этом репозитории.

Examples

See examples/ for runnable HTML pages. examples/cdn-demo.html exercises both the ESM and the IIFE/global builds from dist/.

版本与发布记录

@cat-of-summer/st-script 共发布 25 个版本,首次发布于 2026/07/01;过去 12 个月发布了 25 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.6.1latest2026/11/063 天前
1.6.02026/10/2416 天前
1.5.02026/10/1921 天前
1.4.22026/10/1921 天前
1.4.12026/10/1921 天前
1.4.02026/10/1921 天前

关于 @cat-of-summer/st-script 的常见问题

@cat-of-summer/st-script 是什么?

Standalone JS classes/components (Modal, App, Typograf , …), shipped as ESM and IIFE/CDN builds.

如何安装 @cat-of-summer/st-script?

在项目目录运行 npm install @cat-of-summer/st-script,或使用 pnpm add / yarn add / bun add。

@cat-of-summer/st-script 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/cat-of-summer__st-script 是否存在。

@cat-of-summer/st-script 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cat-of-summer/st-script 可以商用吗?

@cat-of-summer/st-script 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cat-of-summer/st-script 的下载量有多少?

根据 npm 官方下载统计,@cat-of-summer/st-script 在 2026/10/09 – 2026/11/07 这 30 天内被下载 2,215 次,日均约 74 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cat-of-summer/st-script 还在维护吗?

最新版本 1.6.1 发布于 2026/11/06(3 天前);至今共发布 25 个版本,其中过去 12 个月发布了 25 个;首次发布于 2026/07/01。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。