@types/node has no ncu policy here, so a run would move it off the 24.x line that matches the Node 24 runtime. Its "latest" dist-tag points at the 22.x line, so the default target reports no updates at all either. Select the target per package instead. - add .ncurc.js selecting the "minor" target for @types/node - pick up @types/node 24.13.4
BSI-Neuroinformatics
RIKEN BSI Research Database Portal — a Vite + React + TypeScript single page application.
Requirements
- Node.js 22.22.2+ / 24.15+ / 26+ (developed on Node 24)
- npm
Setup
npm install
The converted XOOPS data (modules/, uploads/) is not tracked in git and is not part of the
build. Symlink it into public/ so the dev server can serve it:
ln -s ../../static-contents/modules public/modules
ln -s ../../static-contents/uploads public/uploads
That assumes the repository is checked out next to static-contents/:
bsi-ni.brain.riken.jp/
├── bsi-ni.brain.riken.jp/ this repository
└── static-contents/ modules/ and uploads/
That data is produced by xoops-static-exporter
(sites/bsi-ni.brain.riken.jp/).
Scripts
npm run dev
Starts the Vite dev server on http://localhost:5173 with hot module replacement.
npm run build
Type-checks the project (tsc -b) and builds the production bundle into dist/.
npm run preview
Serves the contents of dist/ locally to verify a production build.
npm run typecheck
Runs the TypeScript project references build without emitting output.
npm run lint / npm run format / npm run check
Runs Biome (biome.json): lint reports problems, format rewrites
formatting, and check applies both plus import sorting.
Deployment
npm run build writes a static bundle to dist/ (a few MB). The archive data is deliberately left
out of it: build.copyPublicDir is off and only the real files in public/ are emitted, so the
symlinked modules/ and uploads/ are skipped.
On the server, place dist/ at the document root and symlink the archive data into it:
ln -s /path/to/archive/modules /var/www/bsi-ni/modules
ln -s /path/to/archive/uploads /var/www/bsi-ni/uploads
Apache needs Options FollowSymLinks and Require all granted on the archive directory.
Use symlinks rather than Alias. An Alias /modules ... maps the URL outside the document root,
so public/.htaccess no longer applies to it and every legacy /modules/<module>/*.php URL stops
reaching the SPA redirect handler. With symlinks the existing precedence still holds: real files
are served directly, everything else falls through to index.html.
Because the app uses HTML5 history routing, the web server must fall back to index.html for
unknown paths — see public/.htaccess.