Ответ 1
Да, CommonJS Modules/1.1 определяет только один способ сделать это.
Я использовал его только с Node.js на стороне сервера, но я считаю, что существуют другие библиотеки, созданные для работы с браузером, совместимым с CommonJS. Остерегайтесь того, что для сервера/браузера есть несколько спецификаций модулей (пока не вникал в это).
Модули написаны так же, как и любой другой кусок javascript, единственное дополнение - вы экспортируете то, что хотите выставить:
module.exports.bar = Bar;
function Bar() {
// code
}
И использование:
var foo = require('mymodule');
foo.bar();
Что на самом деле сделано в фоновом режиме, весь код завернут в другую функцию и экспортирует его свойства.
Кроме того, Майкл Болин рассказал о подобной проблеме в своем разговоре о ключевом слове "с" в JSConf.