Loading...
Loading...
Migrate Node.js projects to Bun with compatibility analysis. Use when converting existing npm/pnpm/yarn projects to Bun or auditing dependencies for Bun compatibility.
npx skill4agent add daleseo/bun-skills node-to-bunbun --version# Check Node.js version
node --version
# Check package manager
ls -la | grep -E "package-lock.json|yarn.lock|pnpm-lock.yaml"package.jsonpackage.jsoncat package.jsonbcryptbcryptjs@node-rs/bcryptsharpnode-canvassqlite3bun:sqlitenode-gypfseventsesbuild# Check if workspaces are defined
grep -n "workspaces" package.jsonBUN_MIGRATION_REPORT.md# Bun Migration Analysis Report
## Project Overview
- **Name**: [project name]
- **Current Node Version**: [version]
- **Package Manager**: [npm/yarn/pnpm]
- **Project Type**: [app/library/monorepo]
## Dependency Analysis
### ✅ Compatible Dependencies
[List dependencies that are Bun-compatible]
### ⚠️ Potentially Incompatible Dependencies
[List dependencies that may have issues]
**Recommended Actions:**
- [Specific migration steps for each incompatible dependency]
### 🔄 Recommended Replacements
[List suggested package replacements]
## Configuration Changes Needed
### package.json
- [ ] Update scripts to use `bun` instead of `npm`/`yarn`
- [ ] Review and update `engines` field
- [ ] Check `type` field (ESM vs CommonJS)
### tsconfig.json
- [ ] Update `moduleResolution` to `"bundler"`
- [ ] Add `bun-types` to types array
- [ ] Set `allowImportingTsExtensions` to `true`
### Build Configuration
- [ ] Review webpack/rollup/esbuild config (may use Bun bundler)
- [ ] Update test runner config (use Bun test instead of Jest)
## Migration Steps
1. Install Bun dependencies
2. Update configuration files
3. Run tests to verify compatibility
4. Update CI/CD pipelines
5. Update documentation
## Risk Assessment
**Low Risk:**
[List low-risk changes]
**Medium Risk:**
[List items needing testing]
**High Risk:**
[List critical compatibility concerns]# Create backup branch if in git repo
git branch -c backup-before-bun-migration
# Or suggest user commits current state
git add -A
git commit -m "Backup before Bun migration"// Read and parse package.json{
"scripts": {
"dev": "bun run --hot src/index.ts",
"start": "bun run src/index.ts",
"build": "bun build src/index.ts --outdir=dist",
"test": "bun test",
"typecheck": "bun run --bun tsc --noEmit",
"lint": "bun run --bun eslint ."
}
}{
"engines": {
"bun": ">=1.0.0"
}
}{
"type": "module",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js",
"require": "./dist/index.cjs"
}
}
}cat tsconfig.json{
"compilerOptions": {
"target": "ES2022",
"module": "ESNext",
"moduleResolution": "bundler",
"types": ["bun-types"],
"lib": ["ES2022"],
"jsx": "react-jsx",
"strict": true,
"esModuleInterop": true,
"skipLibCheck": true,
"resolveJsonModule": true,
"allowImportingTsExtensions": true,
"noEmit": true
}
}moduleResolution: "bundler"types: ["bun-types"]allowImportingTsExtensions: true.tsnoEmit: true{
"workspaces": [
"packages/*",
"apps/*"
]
}# Verify workspace structure
find . -name "package.json" -not -path "*/node_modules/*"rm -f package-lock.json yarn.lock pnpm-lock.yamlbun installbun.lockbbun install --frozen-lockfile # Equivalent to npm cibunfig.toml[test]
preload = ["./tests/setup.ts"]
coverage = true
coverageThreshold = 0.8import { test, expect } from '@jest/globals'import { test, expect } from 'bun:test'jest.mock()mock()bun:testls -la | grep .env.envrequire('dotenv').config().env// bun-build.ts
await Bun.build({
entrypoints: ['./src/index.ts'],
outdir: './dist',
minify: true,
splitting: true,
sourcemap: 'external',
target: 'bun',
});{
"scripts": {
"build": "bun run bun-build.ts"
}
}name: CI
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Setup Bun
uses: oven-sh/setup-bun@v1
with:
bun-version: latest
- name: Install dependencies
run: bun install --frozen-lockfile
- name: Run tests
run: bun test
- name: Type check
run: bun run typecheck
- name: Build
run: bun run build# 1. Check dependencies installed correctly
bun install
# 2. Run type checking
bun run --bun tsc --noEmit
# 3. Run tests
bun test
# 4. Try development server
bun run dev
# 5. Test production build
bun run build## Prerequisites
- [Bun](https://bun.sh) 1.0 or higher
## Installation
```bash
bun installbun run devbun test
**CHANGELOG.md entry:**
```markdown
## [Version] - [Date]
### Changed
- Migrated from Node.js/npm to Bun
- Updated all dependencies to Bun-compatible versions
- Replaced [specific packages] with [alternatives]
- Updated TypeScript configuration for Bunerror: Cannot find module "bcrypt"# Replace with pure JavaScript alternative
bun remove bcrypt
bun add bcryptjs
# Update imports
# Before: import bcrypt from 'bcrypt';
# After: import bcrypt from 'bcryptjs';error: require() of ES Module not supportedpackage.json{
"type": "module"
}.mts.ctserror: Cannot resolve "@/components"tsconfig.json{
"compilerOptions": {
"baseUrl": ".",
"paths": {
"@/*": ["./src/*"]
}
}
}error: jest is not defined// Before
import { describe, it, expect } from '@jest/globals';
// After
import { describe, it, expect } from 'bun:test';package.jsontsconfig.jsonbun installbun test# Compare install times
time bun install # Should be 3-10x faster than npm
# Compare test execution
time bun test # Should be faster than Jest
# Compare startup time
time bun run src/index.ts # Should be 90% faster than ts-node# Return to backup branch
git checkout backup-before-bun-migration
# Or restore original state
git reset --hard HEAD~1
# Reinstall original dependencies
npm install # or yarn/pnpm