Me he puesto al día con el ecosistema JS moderno del lado del cliente y he leído CommonJS y AMD (incluidas las herramientas asociadas: browserify, requirejs, onejs, jam, docenas de otras). Si estoy escribiendo una biblioteca Javascript, ¿cómo la modularizo / empaqueto de modo que pueda ser accesible de manera más amplia (idealmente por usuarios que confían en CommonJS, AMD y especialmente ninguno)?
Las bibliotecas populares como jQuery parecen usar la concatenación de archivos de la vieja escuela para construirse y detectar dinámicamente si debe escribir en un exports
contexto global o en otro. Actualmente estoy haciendo lo mismo, pero la desventaja principal es que si (a diferencia de jQuery) dependo de algunas bibliotecas, es bueno no tener que pedirles a los usuarios que incluyan manualmente el conjunto transitivo. (Aunque actualmente solo tengo dos dependencias). Y, por supuesto, la contaminación del espacio de nombres global.
¿O tal vez es más limpio generar múltiples versiones de mi biblioteca, para cada contexto?
También me pregunto sobre empaque y publicación. Hay varios sistemas, pero creo que el principal es Bower, que es fácil de manejar ya que todo lo que hace es buscar. Sin embargo, me pregunto si también debería apuntar a otros sistemas de paquetes como el componente (que requiere CommonJS).
¿Hay otros aspectos relevantes que debería tener en cuenta? ¿Hay algún buen proyecto de ejemplo a seguir para todo esto?