私はNode.jsを使用してプロジェクトに取り組んでおり、サーバー側のコードは十分に大きくなっており、複数のファイルに分割したいと思っています。これは長い間クライアント側で行われたようで、開発は各ファイルにscript
タグを挿入することで行われ、配布のためだけにすべてをまとめるために使用される「Make」のようなものです。すべてのサーバー側コードを連結しても意味がないので、その方法を尋ねるつもりはありません。使用できる最も近いものはrequire()
ですが、ブラウザのscript
のように振る舞わず、require'dファイルが共通の名前空間を共有しません。
Shooter のような古いNode.jsプロジェクトを見ると、これはかつてそうではなかったようです。私のrequire'dファイルは、コンパイル時または実行時にグローバル呼び出し名前空間にアクセスできません。これを回避する簡単な方法はありますか?それとも、必要なすべてのJSファイルを呼び出しスコープから完全に自律的にする必要がありますか?
グローバルは悪であるため、共通の名前空間は必要ありません。ノードでモジュールを定義します
// someThings.js
(function() {
var someThings = ...;
...
module.exports.getSomeThings = function() {
return someThings();
}
}());
// main.js
var things = require("someThings");
...
doSomething(things.getSomeThings());
モジュールを定義し、exports
に書き込むことでモジュールのパブリックAPIを公開します。
これを処理する最良の方法は、依存性注入です。モジュールはinit
関数を公開し、モジュールに依存関係のオブジェクトハッシュを渡します。
グローバルスコープへのアクセスを本当に要求する場合は、global
を介してアクセスできます。すべてのファイルは、global
オブジェクトに書き込みおよび読み取りできます。繰り返しますが、グローバルを使用する必要はありません。
re @ Raynos answer 、モジュールファイルがそれを含むファイルの隣にある場合、
var things = require("./someThings");
モジュールがnpmで公開およびインストールされている場合、または./node_modules/
フォルダーに明示的に配置されている場合、
var things = require("someThings");
正しい。