Uma outra forma de escrever módulos que é popular até os dias de hoje é o padrão CommonJS (ou CJS, em siglas). Na verdade, CommonJS é o nome do grupo por trás da especificação, mas podemos dizer que é o nome do padrão já que é o adotado mais comumente.
Se você já utilizo Node certeza já deve ter visto esse padrão e você pode ver sua API na página oficial da documentação e também na Wiki do site CommonJS (que é acessível através da página principal do grupo CommonJS)
Também podemos exportar diretamente um objeto com a função soma, poderíamos fazer isso da seguinte forma:
Funcionaria perfeitamente, mas dessa forma, precisamos ajustar a maneira como executamos a função, já que agora exportamos um objeto com a propriedade soma:
Uma ferramenta bem bacana que ficou conhecida por aplicar esse padrão e também segue a linha dos empacotadores de módulo) é o Browserify.
UMD é a sigla para Definição de Módulo Universal (ou Universal Module Definition) é outra maneira de trabalhar com módulos e você pode checar a API no repositório do GitHub.
A ideia por trás do UMD é prover uma forma de importar/exportar módulos que funcionasse tanto em ambientes com AMD quanto com CommonJS.
À primeira vista pode ser um padrão um pouco estranho de ver, mas o que ele faz é, basicamente, verificar se as funções existentes no ambiente suportam AMD ou CommonJS e adapta a utilização dos módulos para cada caso