WIP: Fix Electron build issues and migrate to @nostr/tools
- Fix TypeScript compilation errors in platform services - Add missing rotateCamera method and isNativeApp property - Fix index.html path resolution for packaged Electron apps - Create separate Vite config for Electron renderer process - Migrate from nostr-tools to @nostr/tools via JSR for ESM compatibility - Update all Vite configs to handle mixed npm/JSR package management - Add comprehensive documentation in BUILDING.md - Fix preload script path resolution in packaged builds Resolves build failures with deep imports and missing UI in AppImage.
This commit is contained in:
83
BUILDING.md
83
BUILDING.md
@@ -81,6 +81,89 @@ Install dependencies:
|
||||
npm install
|
||||
```
|
||||
|
||||
## Package Management
|
||||
|
||||
TimeSafari uses a mixed package management approach, combining npm and JSR (JavaScript Registry) for optimal dependency management.
|
||||
|
||||
### JSR Integration
|
||||
|
||||
Some packages are installed via JSR for better ESM support and modern TypeScript compatibility:
|
||||
|
||||
```bash
|
||||
# Install JSR packages
|
||||
npx jsr add @nostr/tools
|
||||
```
|
||||
|
||||
### Package Migration History
|
||||
|
||||
#### nostr-tools → @nostr/tools
|
||||
|
||||
**Date**: June 2025
|
||||
**Reason**: Resolved Vite/Rollup build issues with deep imports
|
||||
|
||||
**Before** (npm):
|
||||
```typescript
|
||||
import { finalizeEvent } from "nostr-tools/lib/cjs/index.js";
|
||||
import { accountFromExtendedKey } from "nostr-tools/lib/cjs/nip06.js";
|
||||
```
|
||||
|
||||
**After** (JSR):
|
||||
```typescript
|
||||
import { finalizeEvent } from "@nostr/tools";
|
||||
import { accountFromExtendedKey } from "@nostr/tools/nip06";
|
||||
```
|
||||
|
||||
**Benefits**:
|
||||
- ✅ Proper ESM support
|
||||
- ✅ No deep import issues with Vite/Rollup
|
||||
- ✅ Better TypeScript compatibility
|
||||
- ✅ Modern package structure
|
||||
|
||||
### Current Package Strategy
|
||||
|
||||
- **npm**: Primary package manager for most dependencies
|
||||
- **JSR**: Used for packages with better ESM support or modern alternatives
|
||||
- **Mixed approach**: Allows using the best package for each dependency
|
||||
|
||||
### When to Use JSR
|
||||
|
||||
Consider using JSR for:
|
||||
- Packages with ESM/CJS compatibility issues in npm
|
||||
- Modern TypeScript-first packages
|
||||
- Packages that work better with modern bundlers
|
||||
- New dependencies where JSR has a better alternative
|
||||
|
||||
### Vite Configuration
|
||||
|
||||
The build system is configured to handle both npm and JSR packages:
|
||||
|
||||
```typescript
|
||||
// vite.config.common.mts
|
||||
resolve: {
|
||||
alias: {
|
||||
'@nostr/tools': path.resolve(__dirname, 'node_modules/@nostr/tools'),
|
||||
'@nostr/tools/nip06': path.resolve(__dirname, 'node_modules/@nostr/tools/nip06'),
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Troubleshooting Package Issues
|
||||
|
||||
1. **Build failures with deep imports**
|
||||
- Check if package has ESM/CJS compatibility issues
|
||||
- Consider JSR alternative if available
|
||||
- Update Vite configuration if needed
|
||||
|
||||
2. **TypeScript errors**
|
||||
- Ensure proper type definitions are available
|
||||
- Check package exports in package.json
|
||||
- Verify import paths match package structure
|
||||
|
||||
3. **Mixed package manager issues**
|
||||
- Keep package.json and node_modules in sync
|
||||
- Use `npm install` after JSR package additions
|
||||
- Check for conflicting package versions
|
||||
|
||||
## Web Development
|
||||
|
||||
### Local Development
|
||||
|
||||
Reference in New Issue
Block a user