js-library-distribution
Patterns for developing distributable JavaScript/TypeScript libraries. Use when building npm packages, SDK libraries, or any code that runs in customer environments.
Installation
Suivez les instructions du dépôt pour votre agent. Consultez les fichiers et dépendances avant l’installation.
Voir la source ↗GuidesInstructions
Library Distribution Patterns
Critical: No Global Pollution
Distributable libraries run in customer environments alongside unknown code. Global pollution can break customer sites.
NEVER Modify Global Objects
// ❌ CRITICAL: Never extend native prototypes
Array.prototype.customMethod = function() { ... }
String.prototype.format = function() { ... }
Object.prototype.toJSON = function() { ... }
// ❌ CRITICAL: Never modify third-party libraries
import _ from 'lodash'
_.customUtil = function() { ... } // Pollutes lodash globally
// ❌ CRITICAL: Never assign to window/global
window.MyLib = { ... }
globalThis.MyLib = { ... }
Safe Patterns
// ✅ Export your own functions
export function customMethod(arr: unknown[]) { ... }
export function format(str: string) { ... }
// ✅ Use composition, not extension
import { map } from 'lodash'
export function customMap<T>(arr: T[]) {
return map(arr, /* your logic */)
}
// ✅ If global is unavoidable, use unique namespace
const UNIQUE_NAMESPACE = '__myCompany_myLib_v1__'
if (typeof window !== 'undefined') {
(window as any)[UNIQUE_NAMESPACE] = { ... }
}
No Side Effects on Import
// ❌ BAD: Side effects when imported
// This runs immediately when someone imports your library
console.log('Library loaded')
fetch('/api/init')
document.addEventListener('DOMContentLoaded', ...)
// ✅ GOOD: Explicit initialization
export function init(config: Config) {
// Side effects only when user explicitly calls
}
Bundle Considerations
Tree-Shaking Support
// ✅ Use named exports for tree-shaking
export { functionA } from './a'
export { functionB } from './b'
// ❌ Barrel exports can break tree-shaking
export * from './everything'
Dual Package (ESM + CJS)
{
"main": "./dist/index.cjs",
"module": "./dist/index.mjs",
"types": "./dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
}
}
}
Dependency Management
// ❌ BAD: Bundling dependencies (version conflicts)
// Your lodash 4.x vs customer's lodash 3.x
// ✅ GOOD: Peer dependencies
// package.json
{
"peerDependencies": {
"lodash": "^4.0.0"
}
}
Checklist Before Publish
- No
prototypemodifications - No third-party library modifications
- No implicit globals (
window.X,globalThis.X) - No side effects on import
- Named exports for tree-shaking
- Peer dependencies declared
- Tested in isolation AND alongside common libraries
Exemples
Consultez les exemples du dépôt source.
Voir la source ↗Historique source
- Date d’indexation
- 2026-03-11
- Mise à jour de l’index
- 2026-03-11
- Branch
- main
Les dates concernent ce répertoire. Consultez le dépôt pour l’historique du code.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!