Ich habe ein Knotenmodul erstellt, das im Wesentlichen nur einige nützliche JS ist, die auch clientseitig verwendet werden können. Ich weiß, dass request.js common.js-Komponenten laden kann, aber ich möchte nicht unbedingt ein Mandat machen, dass jeder, der meine Modul-Client-Seite verwendet, auch benötigt oder common.js oder so etwas. Ich möchte sie auch nicht zwingen, die module.exports = ...
am Ende der Datei zu entfernen. Wie lösen andere dieses Problem? Schaffst du einfach 2 Versionen oder 2 "kompilierte" Versionen? Funktioniert module.exports überall?module.exports clientseitige
18
A
Antwort
16
Dies ist, was Underscore.js tut:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root['_'] = _;
}
4
Das ist für mich (Coffee) gearbeitet hat. Es sei angenommen, ‚Namespace‘ ist, was Sie auf dem window
Umfang für die Kunden
(module ? {}).exports = @Namespace =
my: 'cool'
module: '!'
Dann können Sie require('namespace').my === 'cool'
in Node.js oder Namespace.my === 'cool'
im Browser verwenden, geltend machen wollen. Dies schlägt sich in JS als
(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = {
my: 'cool',
module: '!'
};
1
ich diese einfacher finden:
try {
module.exports = exports = MyModule;
} catch (e) {}
Diese Datei in eingeschlossen werden können, sowohl den Browser und node.js.
Die beste Exposition zu diesem Thema, die ich kenne, ist http://www.2ality.com/2011/11/module-gap.html. Der Autor diskutiert Vorteile/Nachteil und Entwicklungs-/Deployment-Modi. –