payload-plugin-newsletter
Version:
Complete newsletter management plugin for Payload CMS with subscriber management, magic link authentication, and email service integration
74 lines (59 loc) • 2.87 kB
Markdown
# ESM/CJS Module Resolution Fix Summary
## Changes Made
### 1. **Added tsup Build Tool**
- Added `tsup` v8.3.5 to devDependencies for proper ESM/CJS dual package support
- Created `tsup.config.ts` with configuration for building both ESM and CJS outputs
### 2. **Updated package.json**
- Changed entry points from source files (`./src/`) to built files (`./dist/`)
- Added proper exports configuration with both ESM and CJS support:
- ESM files: `.js` extension with `.d.ts` types
- CJS files: `.cjs` extension with `.d.cts` types
- Updated build scripts to use tsup
- Added `module` field pointing to ESM entry
### 3. **Updated tsconfig.json**
- Changed `moduleResolution` from "bundler" to "node" for better compatibility
### 4. **Created Build Script**
- Added `build-and-commit.sh` for easy building and verification
## File Structure After Build
```
dist/
├── index.js # ESM main entry
├── index.cjs # CJS main entry
├── index.d.ts # TypeScript definitions
├── index.d.cts # CJS TypeScript definitions
├── client.js # ESM client export
├── client.cjs # CJS client export
├── client.d.ts # Client TypeScript definitions
├── client.d.cts # CJS Client TypeScript definitions
├── types.js # ESM types export
├── types.cjs # CJS types export
├── types.d.ts # Types TypeScript definitions
├── types.d.cts # CJS Types TypeScript definitions
├── components.js # ESM components export
├── components.cjs # CJS components export
├── components.d.ts # Components TypeScript definitions
└── components.d.cts # CJS Components TypeScript definitions
```
## How to Build and Publish
1. **Install dependencies**: `bun install`
2. **Build the package**: `bun run build`
3. **Test locally**: Link the package to test in your project
4. **Publish**: `npm publish` (dist files will be included automatically)
## Benefits
1. **Proper ESM Support**: Next.js apps using `"type": "module"` can now import the package without issues
2. **CJS Compatibility**: Still works with CommonJS projects
3. **TypeScript Support**: Proper type definitions for both module systems
4. **Clean Exports**: Clear separation of server/client code with proper exports
5. **Future Proof**: Ready for the ESM-first ecosystem
## Testing the Fix
To test in your ContentQuant project:
1. Build the plugin: `bun run build`
2. Link locally: `npm link` in plugin directory
3. Link in project: `npm link payload-plugin-newsletter` in ContentQuant
4. Import and use normally
## Next Steps
1. Run `./build-and-commit.sh` to build the package
2. Test the built package locally
3. Commit changes with message: "fix: add tsup build system for proper ESM/CJS dual package support"
4. Push to repository
5. Publish new version to npm