Объединение файлов шаблонов JavaScript в один файл и использование их функций

Я пишу разные файлы в JavaScript-модуле Patern следующим образом:

файл 1.js

var Module = (function (module) {

  module.function = function () {

    console.log(this.thirdFunction) // This is my issue. I cannot access the function from the third file because it is concatenated in a way that the function still not exist.  

  };

  return module;

}(Module || {}));

some-folder / file 2.js

var Module = (function (module) {

  module.somethingElse = function () {


  };

  return module;

}(Module || {}));

что угодно / файл 3.js

var Module = (function (module) {

  module.thirdFunction = function () {


  };

}(Module || {}));

Я положил все эти файлы в разные каталоги, имена в разное время. Затем я использую инструмент объединения, чтобы иметь один файл, а затем я использую его в своем HTML-файле. Но я сталкиваюсь с проблемой, которую не могу решить.

Чтобы все это работало, я должен включить их особым образом и для того, чтобы вызывать функции из всего, что мне нужно, и переупорядочивать файлы, когда что-то еще не определено / не создано в возвращенном конечном объекте. Если у меня будет 100 файлов и папок, это снова станет для меня проблемой.

Правильно ли я понимаю это: http://gruntjs.com/configuring-tasks, который у меня есть, чтобы вручную заказывать файлы, папки и все, что есть в моих заданиях?

Я не хочу использовать инструменты AMD, просто обычные файлы JavaScript и какой-то подход к взлому требований к заказу. Если для меня нет легкой идеи, я бы попробовал инструменты AMD, такие как require.js, но я не уверен, что эти инструменты могут помочь в решении этой проблемы. Я был бы признателен за некоторый инструмент grunt, некоторые соглашения об именах файлов / папок, за все, что не заставило бы меня устанавливать все больше и больше инструментов. Заранее спасибо!

Еще одна вещь, которая беспокоит меня, заключается в следующем:

Если я хочу изолировать код, но мне не нужно возвращать свойство объекта в конечном объекте, можно ли сделать что-то вроде этого:

файл 4.js

var Module = (function (module) {

 var someThing = Module.somethingElse() // from file 2.js
 and then using someThing here for clicking, DOM rendering, etc, etc 

}(Module || {}));

Это глупо придерживаться того же var Module условности для файлов, где я на самом деле ничего не возвращаю? Я просто думаю о том, как избежать имени объекта и использования this снова

1 ответ

Действительно, инструменты AMD были созданы именно для такой проблемы. Однако вы можете обойти это в некоторой степени с ворчанием. Вы можете просто упорядочить файлы, которые нужно сначала поместить в папку, и перечислить их в нужном вам порядке, а затем создать еще одну папку, содержащую все файлы, порядок которых не имеет значения, включая все.

'js/main/First.js',
'js/main/Second.js',
'js/rest/*.js'

Неважно, что вы выберете для этого проекта, вы можете заглянуть в Require.js или Browserify для дальнейшей работы.

Другие вопросы по тегам