Files
metabuilder/codegen/docs/PACKAGES_REFACTOR.md
johndoe6345789 a51130a127 feat: Add external low-code and postgres repositories
- codegen: Low-code React app with JSON-driven component system
- packagerepo: Schema-driven package repository with backend/frontend
- postgres: Next.js app with Drizzle ORM and PostgreSQL

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-21 16:48:52 +00:00

88 lines
2.8 KiB
Markdown

# Packages Folder Refactor Summary
## Changes Made
### 1. Removed Workspaces Configuration
- **File**: `package.json`
- **Change**: Removed the `workspaces` section that was causing npm workspace protocol issues
- **Before**:
```json
"workspaces": {
"packages": ["packages/*"]
}
```
- **After**: Section completely removed
### 2. Changed Dependency Protocol
- **File**: `package.json`
- **Package**: `@github/spark`
- **Before**: Used workspace protocol (implicit with workspaces config)
- **After**: Using explicit file path protocol: `"@github/spark": "file:./packages/spark-tools"`
- **Reason**: The `workspace:*` protocol is not supported in standard npm and causes Docker build failures
### 3. Removed Workspace-Specific Overrides
- **File**: `package.json`
- **Removed**:
```json
"@github/spark": {
"react": "^19.0.0",
"vite": "^7.3.1"
},
"@local/spark-wrapper": {
"react": "^19.0.0"
}
```
- **Reason**: These were specific to workspace configurations and are no longer needed
### 4. Updated Dockerfile
- **File**: `Dockerfile`
- **Change**: Explicitly copy the packages folder before npm ci
- **New approach**:
```dockerfile
COPY package*.json ./
COPY packages ./packages
RUN npm ci --include=optional
```
- **Reason**: Ensures packages are available when npm tries to resolve the file: protocol dependency
### 5. Updated .gitignore
- **File**: `.gitignore`
- **Added exception**: `!packages/*/dist`
- **Reason**: The built dist folders in packages need to be committed for Docker builds to work
## Why These Changes Were Needed
### The Problem
The previous setup used npm workspaces with the `workspace:*` protocol, which:
1. Is a pnpm/yarn feature not fully supported by npm
2. Causes Docker build failures with error: `npm error Unsupported URL Type "workspace:"`
3. Creates complexity in CI/CD pipelines
### The Solution
By removing workspaces and using explicit `file:` protocol:
1. Standard npm can handle the dependency
2. Docker builds work without special workspace handling
3. The spark-tools package remains functional
4. No changes needed to imports in source code
## What Stays The Same
- The `packages/spark-tools` folder remains intact
- All imports from `@github/spark` continue to work
- The spark runtime features (useKV hook, spark global, vite plugins) are unchanged
- Source code requires no modifications
## Next Steps
Run `npm install` to regenerate the package-lock.json file with the new configuration. This will:
1. Remove workspace references from package-lock.json
2. Properly link @github/spark using file: protocol
3. Ensure Docker builds will succeed
## Testing
After running `npm install`, verify:
1. `npm run build` works locally
2. Docker build succeeds: `docker build -t test .`
3. All spark features work (useKV, spark.llm, spark.kv, etc.)