Я пишу код на стороне клиента и хотел бы написать несколько модульных JS файлов, которые могут взаимодействовать, предотвращая глобальное загрязнение пространства имен.
index.html
<script src="util.js"></script>
<script src="index.js"></script>
util.js
(function() {
var helper() {
// Performs some useful utility operation
}
});
index.js
(function () {
console.log("Loaded index.js script");
helper();
console.log("Done with execution.");
})
Этот код прекрасно сохраняет функции утилиты в отдельном файле и не загрязняет глобальное пространство имен. Однако функция вспомогательной утилиты не будет выполняться, потому что "помощник" существует внутри отдельного пространства имен анонимных функций.
Один альтернативный подход включает размещение всего JS-кода внутри одного файла или использование одной переменной в глобальном пространстве имен следующим образом:
var util_ns = {
helper: function() {
// Performs some useful utility operation.
},
etc.
}
Оба этих подхода имеют недостатки в отношении модульности и чистого пространства имен.
Я привык к работе (серверной стороне) в Node.js, где я могу "потребовать" один файл Javascript внутри другого, эффективно вставляя привязки util.js в пространство имен index.js.
Я хотел бы сделать что-то подобное здесь (но на стороне клиента), которое позволит писать код в отдельных модульных файлах, не создавая никаких переменных в глобальном пространстве имен, предоставляя доступ к другим модулям (например, как служебный модуль).
Является ли это выполнимым простым способом (без библиотек и т.д.)?
Если нет, то в сфере создания JS на стороне клиента поведение больше похоже на Node и npm, я знаю о существовании попыток стандартизации requireJS, браузера, AMD и commonJS. Тем не менее, я не уверен в плюсах и минусах и фактическом использовании каждого из них.