Étant donné que le script coffee n'a pas de vardéclaration, il l'insère automatiquement pour toutes les variables dans le script coffee, de cette façon, il empêche la version JavaScript compilée de tout divulguer dans l' espace de noms global .  
Donc, puisqu'il n'y a aucun moyen de faire quelque chose "fuir" dans l' espace de noms global du côté café-script des choses, vous devez définir vos variables globales en tant que propriétés de l' objet global .
  les attacher en tant que propriétés sur la fenêtre
Cela signifie que vous devez faire quelque chose comme window.foo = 'baz';, qui gère le cas du navigateur, car l' objet global est le window.
Node.js
Dans Node.js, il n'y a pas d' windowobjet, mais plutôt l' exportsobjet qui est passé dans le wrapper qui enveloppe le module Node.js (Voir: https://github.com/ry/node/blob/master/src/node.js# L321 ), donc dans Node.js ce que vous devez faire est exports.foo = 'baz';.
Voyons maintenant ce qu'il indique dans votre citation de la documentation:  
  ... ciblant à la fois CommonJS et le navigateur: root = exports? ce
Ceci est évidemment un script de café, alors regardons ce que cela compile réellement:  
var root;
root = (typeof exports !== "undefined" && exports !== null) ? exports : this;
Tout d'abord, il vérifiera si exportsest défini, car essayer de référencer une variable inexistante en JavaScript produirait sinon une SyntaxError (sauf lorsqu'elle est utilisée avectypeof )
Donc, s'il exportsexiste, ce qui est le cas dans Node.js (ou dans un site Web mal écrit ...), la racine pointera exports, sinon this. Alors quoi this?
(function() {...}).call(this);
L'utilisation .calld'une fonction liera l' thisintérieur de la fonction au premier paramètre passé, dans le cas où le navigateur thisserait maintenant l' windowobjet, dans le cas de Node.js, ce serait le contexte global qui est également disponible en tant globalqu'objet.  
Mais puisque vous avez la requirefonction dans Node.js, il n'est pas nécessaire d'affecter quelque chose à l' globalobjet dans Node.js, à la place vous attribuez à l' exportsobjet qui est ensuite renvoyé par la requirefonction.
Café-Script
Après toutes ces explications, voici ce que vous devez faire:  
root = exports ? this
root.foo = -> 'Hello World'
Cela déclarera notre fonction foodans l'espace de noms global (quel qu'il soit). 
C'est tout :)