Javascript.RU

Сборка модулей

Google Closure Compiler умеет собирать javascript не в виде одного большого файла, а в виде нескольких модулей.

Так что все страницы могут грузить только один модуль, а дополнительная функциональность - загружаться лишь там, где она нужна.

Для такой сборки используется флаг компилятора --module.

Например:

java -jar compiler.jar --js src1.js --js src2.js  --js src3.js --module
first:2 --module second:1:first

Создаст модули: first.js и second.js.

Первый модуль, который назван "first", создан из объединенного и оптимизированного кода двух файлов: src1.js и src2.js (первые два параметра --js).

Второй модуль, который назван "second", создан из src3.js - это следующий аргумент --js после включенных в первый модуль. Второй модуль зависит от первого.

Флаг --module second:1:first как раз и означает, что модуль second будет создан из одного файла после вошедших в предыдущий модуль (first) и зависит от модуля first.

Пусть у нас есть следующие файлы.

  • main.js - основная библиотека
    my = {}
    my.main = function() {
    	alert('main')
    }
    
  • hello.js - первый модуль
    my.hello = function() {
    	my.main()
    	alert('hello')
    }
    
  • bye.js - второй модуль
    my.bye = function() {
    	my.main()
    	alert('bye')
    }
    

hello и bye зависят от main.

Следующая команда соберет три модуля: first.js - основой модуль из main.js, second и third - из hello.js и bye.js соответственно.

java -jar compiler.jar --js main.js --js hello.js --js bye.js --module first:1 --module second:1:first --module third:1:first --compilation_level ADVANCED_OPTIMIZATIONS

Результат:

  • first.js
    my={};my.a=function(){alert("main")};
    
  • second.js
    my.c=function(){my.a();alert("hello")};
    
  • third.js
    my.b=function(){my.a();alert("bye")};
    

Этот пример демонстрирует самую важную фичу модулей, ради которой они и задумывались - сохранение связности переменованных переменных.

В частности - обратим внимание, функция my.main (main.js) была переименована в my.a, и именно в таком виде она вызывается в модулях second.js и third.js.

Разумеется, вы можете использовать много файлов для каждого из модулей.

Перечислять файлы --js нужно в том же порядке, в котором они зависят друг от друга.

Директива --module обрабатывается, буквально, так:

--module first:1
Создать модуль first из первого файла в списке.
--module second:1:first
Взять следующий 1 файл из списка и создать из него модуль second, зависящий от first.
--module third:1:first
Взять еще 1 файл из списка и создать из него модуль third, зависящий от first.

При этом зависимость одного модуля от другого означает, что все символы будут переименованы синхронно. Это особенно важно при продвинутой оптимизации.

Есть одно ограничение - разные модули не могут содержать одни и те же файлы. То есть, не получится сделать два модуля, первый из которых включает в себя A.js и B.js, а второй - снова (нельзя) A.js и C.js.

Если вы используете goog.provide/require - компилятор при сборке обработает их и проверит все зависимости.

Как правило, такая сборка осуществляется утилитой calcdeps и описана в статье Система сборки и зависимостей Google Closure Library.

Флаг --module - основной, но есть еще несколько дополнительных.

--module_output_path_prefix
Префикс для имен файлов для откомпилированных модулей, может включать в себя директорию. По умолчанию: ./
--module_wrapper
Необязательный текст до или после модуля. Строка, в которой вместо текста модуля будет %s. Например:
--module_wrapper "/* copyright 2009-2010 */ %s"

Сборка модулей очень полезна, если некоторые из ваших страниц используют большое количество специфического javascript.

Например, у меня это страницы со сложными интерфейсами, такими что грузить их везде - совсем-совсем некошер. Думаю, что-то такое есть и у вас. Google Closure Compiler позволяет решить эту проблему.

Быстрых всем страничек


Автор: юный JS-ер (не зарегистрирован), дата: 19 октября, 2012 - 17:28
#permalink

вот бы ссылку на живой пример реализации
так ведь я и сам могу поразбивать на модули и файлы и загружать их когда нужно - я так понял описывается пример автоматизированного ср-ва в большом проекте


Автор: philomena112 (не зарегистрирован), дата: 6 октября, 2022 - 19:08
#permalink

Your blog contains a lot of interesting content, particularly the discussions. This is an excellent article. Continue your excellent work. Slope Unblocked is a jogging arcade game that provides a unique jogging experience. In the game's 3D running match-up, drive a ball. The gameplay is simple, fast, and addictive.


Автор: antiguans2000, дата: 16 января, 2023 - 15:30
#permalink

The following command will build three modules: first.js- base module from main.js, secondand third- from hello.jsand bye.jsrespectively. Just wondering if any of you knows where can I found a women's pullover crewneck sweatshirt? Thanks!


Автор: miklas (не зарегистрирован), дата: 3 апреля, 2023 - 07:44
#permalink

This unique game has garnered a lot of interest. You must tour the Playtime toy factory in poppy playtime . What happened to the missing employee is a mystery that needs to be solved. There are numerous toys available for retaliation. Make every effort to stay alive while avoiding capture.


Автор: JellyMin (не зарегистрирован), дата: 9 мая, 2023 - 09:06
#permalink

о есть, не получится сделать два модуля, remodel contractor near me


Автор: grouchbutthead, дата: 9 мая, 2023 - 11:43
#permalink

I am grateful for the information and the suggestions that you have provided. eggy car


Автор: antiguans2000, дата: 31 мая, 2023 - 10:58
#permalink

The first.js foundation module will be created from main.js, and the second and third modules will be created from hello.js and bye.js, respectively. | new braunfels house lifting


Автор: myleshackett (не зарегистрирован), дата: 14 июня, 2023 - 07:28
#permalink

I appreciate the advice you have given and the information you have supplied. You can stop by the game getting over it


Автор: robertritchie (не зарегистрирован), дата: 14 июня, 2023 - 11:53
#permalink

Along with shooting, tank games are another aspect of action games that are frequently observed and discussed. Because of this, players are becoming more and more interested in the tank game rocket bot royale. In this game, you will maneuver your tank across an island while battling the bad guys.


Автор: dinneremail (не зарегистрирован), дата: 30 июня, 2023 - 04:41
#permalink

Thank you for sharing this informative article. I am very interested in the information you have shared. free games


Автор: DanielRodriguez (не зарегистрирован), дата: 27 июля, 2023 - 13:01
#permalink

Experience the thrill of being a modern-day gold prospector in Gold Miner, where cutting-edge technology meets the age-old quest for wealth and adventure, allowing you to employ state-of-the-art machinery, explosives, and power-ups to extract gold from the depths like never before.


Автор: JellyMin (не зарегистрирован), дата: 15 августа, 2023 - 15:19
#permalink

Так что все страницы могут грузить только один модуль, а дополнительная функциональность - загружаться лишь там, где она нужна.
detroit michigan drywall plaster


Автор: JellyMin (не зарегистрирован), дата: 16 августа, 2023 - 06:28
#permalink

Разумеется, вы можете использовать много файлов для каждого из модулей.
foundation repair in miami fl


Автор: annajenny (не зарегистрирован), дата: 14 сентября, 2023 - 06:59
#permalink

The use of the --module flag in the word finder compiler simplifies the creation and management of these modules. This feature is particularly useful when dealing with complex codebases with interdependencies between different parts of the code.


Автор: jackbeen (не зарегистрирован), дата: 30 октября, 2023 - 09:56
#permalink

6d lotto result Here are the PCSO lotto result today. These include the results of 6/58, 6/55, 6/49, 6/45, 6/42, 6D, 4D, Swertres (3D), EZ2 (2D) and STL.


Автор: Гость (не зарегистрирован), дата: 1 декабря, 2023 - 13:12
#permalink

It is quite okay to use numerous files for each individual module. geometry dash


Автор: Javier Hansen (не зарегистрирован), дата: 4 января, 2024 - 07:19
#permalink

я понял, как работает компилятор JavaScript. Я ценю информацию, которой вы делитесь. eggy car


Автор: online games (не зарегистрирован), дата: 18 января, 2024 - 05:05
#permalink

If you've been looking for a good relaxing and entertaining game as much lately, this might be of help to you! Online Games


Автор: Гость (не зарегистрирован), дата: 28 февраля, 2024 - 12:59
#permalink

If you've been searching for a relaxing and entertaining game recently, this might be just what you need. geometry dash meltdown


Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 5 =
Введите результат. Например, для 1+3, введите 4.
 
Текущий раздел
Поиск по сайту
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Последние комментарии
Последние темы на форуме
Forum