Подтвердить что ты не робот

Как управлять несколькими файлами JS на стороне сервера с помощью Node.js

Я работаю над проектом с Node.js, а код на стороне сервера становится настолько большим, что я хотел бы разделить его на несколько файлов. Похоже, что это было сделано на стороне клиента целую вечность, разработка выполняется путем вставки тега script для каждого файла, и только для распространения это что-то вроде "Make", используемого для объединения всего. Я понимаю, что нет смысла конкатцировать весь серверный код, поэтому я не спрашиваю, как это сделать. Самая близкая вещь, которую я могу найти, - это require(), но она не очень похожа на script в браузере, поскольку файлы require'd не имеют общего пространства имен.

Посмотрев на несколько старых проектов Node.js, например Shooter, похоже, что это было когда-то не так, или я В моем коде отсутствует что-то действительно простое. Моим файлам require'd не удается получить доступ к глобальному пространству имен во время компиляции или времени выполнения. Есть ли простой способ обойти это или мы вынуждены сделать все наши требуемые JS файлы полностью автономными из области вызова?

4b9b3361

Ответ 1

Вам не нужно распространенное пространство имен, потому что глобальные значения являются злыми. В node мы определяем модули

// someThings.js

(function() {
    var someThings = ...;

    ...

    module.exports.getSomeThings = function() {
        return someThings();
    }

}());

// main.js

var things = require("someThings");
...
doSomething(things.getSomeThings());

Вы определяете модуль, а затем публикуете публичный API для своего модуля, пишите в exports.

Лучший способ справиться с этим - инъекция зависимостей. Ваш модуль предоставляет функцию init, и вы передаете хеш-объект зависимостей в свой модуль.

Если вы действительно настаиваете на доступе к глобальной области, то вы можете получить доступ к этому через global. Каждый файл может записывать и читать объект global. Опять же, вы не хотите использовать глобальные переменные.

Ответ 2

re @Raynos answer, если файл модуля находится рядом с файлом, который включает его, он должен быть

var things = require("./someThings");

Если модуль опубликован и установлен через npm или явно помещен в папку ./node_modules/, тогда

var things = require("someThings");

является правильным.