基本的に、クライアント側でも使用できる便利な JS であるノード モジュールを作成しました。require.js が common.js コンポーネントをロードできることは知っていますが、モジュールのクライアント側を使用するすべての人が require または common.js などを必要とすることを必ずしも義務付けたくはありません。module.exports = ...
また、ファイルの下部にあるを強制的に削除したくありません。他の人はこの問題をどのように解決しますか? 2 つのバージョンを作成するだけですか、それとも 2 つの「コンパイル済み」バージョンを作成するだけですか? module.exports はどこでも機能しますか?
質問する
16879 次
3 に答える
22
これは underscore.js が行うことです:
if (typeof exports !== 'undefined') {
if (typeof module !== 'undefined' && module.exports) {
exports = module.exports = _;
}
exports._ = _;
} else {
root['_'] = _;
}
于 2012-09-24T19:42:44.543 に答える
13
この答えは、割り当てが右から左に評価されるという事実に依存しています。MyModule
がexports
最初に割り当てられ、次にexports
が割り当てられmodule.exports
ます。
が宣言されていない場合module
、例外がスローされます。
短く、クリーンで、覚えやすい:
try {
module.exports = exports = MyModule;
} catch (e) {}
このファイルは、ブラウザと node.js の両方に含めることができます。
于 2017-08-15T11:12:27.380 に答える
4
これは私にとってはうまくいきました(CoffeeScript)。window
「名前空間」がクライアントのスコープで主張したいものであると仮定します
(module ? {}).exports = @Namespace =
my: 'cool'
module: '!'
require('namespace').my === 'cool'
その後、Node.js またはNamespace.my === 'cool'
ブラウザーで使用できます。これはJSに次のように変換されます
(typeof module !== "undefined" && module !== null ? module : {}).exports = this.Namespace = {
my: 'cool',
module: '!'
};
于 2012-09-24T19:55:23.770 に答える