Como o script coffee não possui nenhuma varinstrução, ele o insere automaticamente para todas as variáveis no script coffee-coffee, dessa forma evita que a versão JavaScript compilada vaze tudo para o diretório espaço de nomes global .
Portanto, como não há como "vazar" algo no espaço para nome global a partir do lado do script de café, você precisa definir suas variáveis globais como propriedades do objeto global .
anexá-los como propriedades na janela
Isso significa que você precisa fazer algo como window.foo = 'baz';, que lida com o caso do navegador, já que existe o objeto global é o window.
Node.js
No Node.js, não há windowobjeto, mas o exportsobjeto que é passado para o wrapper que envolve o módulo Node.js. (Veja: https://github.com/ry/node/blob/master/src/node.js# L321 ), então no Node.js o que você precisa fazer é exports.foo = 'baz';.
Agora, vamos dar uma olhada no que ele diz em sua citação dos documentos:
... visando o CommonJS e o navegador: root = exportações? isto
Obviamente, isso é um script de café, então vamos dar uma olhada no que isso realmente compila:
var root;
root = (typeof exports !== "undefined" && exports !== null) ? exports : this;
Primeiro, ele verificará se exports está definido, pois tentar fazer referência a uma variável inexistente no JavaScript produziria um SyntaxError (exceto quando usado com typeof)
Portanto, se exportsexistir, como é o caso do Node.js (ou em um site mal gravado ...), a raiz apontará para o exportscontrário this. Então o que é this?
(function() {...}).call(this);
O uso .callde uma função vinculará a thisfunção interna ao primeiro parâmetro passado, no caso do navegador thisagora ser o windowobjeto; no caso do Node.js, seria o contexto global que também está disponível como globalobjeto.
Mas como você tem a requirefunção no Node.js., não há necessidade de atribuir algo ao globalobjeto no Node.js. Em vez disso, você o atribui ao exportsobjeto que é retornado pela requirefunção.
Coffee-Script
Depois de toda essa explicação, aqui está o que você precisa fazer:
root = exports ? this
root.foo = -> 'Hello World'
Isso declarará nossa função foono espaço de nomes global (o que quer que seja).
Isso é tudo :)