This document provides step-by-step instructions for migrating an existing TypeScript Vite plugin package into this monorepo structure.
- Your existing plugin package should be a TypeScript Vite plugin
- The monorepo is already set up with the shared utilities and build system
-
Copy your plugin's source folder:
# Create the package directory mkdir packages/your-plugin-name # Copy your existing source files cp -r /path/to/your-existing-plugin/src packages/your-plugin-name/src
-
Verify source structure:
packages/your-plugin-name/ └── src/ ├── index.ts # Your main plugin file └── [other files...] # Any additional source files
Create packages/your-plugin-name/package.json:
{
"name": "@collagejs/your-plugin-name",
"version": "1.0.0",
"description": "Your plugin description",
"type": "module",
"main": "dist/index.js",
"types": "dist/index.d.ts",
"files": ["dist"],
"scripts": {
"build": "tsc",
"clean": "rimraf dist src/_shared"
},
"devDependencies": {
"rimraf": "^5.0.5",
"typescript": "^5.3.3"
},
"peerDependencies": {
"vite": "^5.0.0"
}
}Create packages/your-plugin-name/tsconfig.json:
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
"baseUrl": "./src",
"rootDir": "./src",
"outDir": "./dist"
},
"include": ["src/**/*"],
"exclude": ["dist", "node_modules"]
}cd packages/your-plugin-name
npm installIf your plugin uses shared utilities, update import statements in your source files:
Before (if you had shared utilities):
import { someUtility } from '../shared/utils.js';
import { Logger } from '@some-package/logger';After (using monorepo shared utilities):
import { someUtility } from '$/utils.js';# From root directory
npm run build✅ Expected: All packages build successfully, including your new one
Cause: Shared code hasn't been synced to your package
Solution:
# From root
npm run sync-shared
# Or from your package
npm run sync-sharedCause: Import paths pointing outside the src/ directory
Solution: Ensure all imports use the ./_shared pattern for shared code:
// ❌ Wrong - outside rootDir
import { utils } from '../shared/src/utils';
// ✅ Correct - using centralized alias
import { utils } from './_shared';Cause: Incompatible TypeScript configuration
Solution: Use the exact tsconfig.json template from Step 3
Cause: Package not included in workspace
Solution: Verify your package directory is under packages/ and run:
npm install # Reinstall to detect new workspaceYour migrated plugin can now use these shared utilities:
import { PluginLogger } from './_shared';
const logger = new PluginLogger('your-plugin');
logger.info('Plugin initialized'); // Blue with prefix
logger.success('Build complete'); // Green
logger.warn('Deprecated option'); // Yellow
logger.error('Build failed'); // Redimport { isDev, isProd } from './_shared';
if (isDev()) {
// Development-specific code
logger.info('Running in development mode');
}import { /* available utilities */ } from './_shared';
// Check packages/shared/src/ for all available utilitiesAfter migration, verify:
- Package builds successfully:
cd packages/your-plugin && npm run build - Root build includes your package:
npm run build - Development mode works:
cd packages/your-plugin && npm run dev - Shared utilities import correctly:
import { PluginLogger } from '' - TypeScript compilation has no errors
- Generated
dist/folder contains.js,.d.tsfiles
- Update your plugin logic to use the shared utilities where beneficial
- Add tests following the existing pattern in other packages
- Update documentation specific to your plugin's functionality
- Consider contributing new shared utilities that other plugins might use
Your plugin is now fully integrated into the monorepo build system!