Является ли хорошей идеей использовать условные зависимости в модулях AMD? -- javascript поле с участием module поле с участием js-amd пол Связанный проблема

Is it a good idea to use conditional dependencies in AMD modules?


4
vote

проблема

русский

Я думаю об использовании условий для указания модуля зависит в модульной системе AMD. Например, чтобы загрузить библиотеку на браузере и библиотеку на сервере.

Это может выглядеть так:

 <код> null5  

Это позволит мне построить слой абстракции для 2 модулей. Но это действительно хорошая идея? Есть ли какие-либо недостатки в этом?

Английский оригинал

I'm thinking of using conditions for specifying module dependendies in the AMD module system. For example to load libraryA on the browser and libraryB on the server.

This could look like this:

define([window?"libraryA":"libraryB"],function(library){     //do some stuff }); 

This would allow me to build an abstraction layer for 2 modules. But is this really a good idea? Are there any drawbacks in doing this?

</div
        

Список ответов

4
 
vote
vote
Лучший ответ
 

Этот подход может вызвать проблемы для инструмента сборки.

Обновление:

После дальнейшего исследования я обнаруживаю, что Настройки конфигурации в основном файле JS не читаются по умолчанию Оптимизатор. Итак, очистительное решение будет использовать другое значение config
/ a> для клиента и сервера.

Оригинал:

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

 <код> // dependent module define(["libraryAB"], function (library) {     //do some stuff });   // libraryAB.js dependency module define([], function () {      return window ?         defineLibraryA() :         defineLibraryB();  });   

Вы можете альтернативно сохранить <код> libraryA и <код> libraryB кода, отдельно, определяя <код> libraryAB таким образом.

 <код> // libraryAB.js dependency module define(["libraryA", "libraryB"], function (libraryA, libraryB) {      return window ? libraryA : libraryB;  });  //define libraryA.js and libraryB.js as usual   

Если вы хотите избежать выполнения libraryA на сервере или <код> libraryB на клиенте, вы можете иметь эти модули возвращать функции и воспоминания, при необходимости.

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

 

That approach could cause problems for the build tool.

Update:

After further research, I find that config settings in your main JS file are not read by default by the optimizer. So, a cleaner solution would be to use a different map config for client and server.

Original:

A safer approach may be to define a module that adapts itself to the environment, thus keeping all the conditional code within your module definitions, and leaving all dependency lists in the most reliable format.

// dependent module define(["libraryAB"], function (library) {     //do some stuff });   // libraryAB.js dependency module define([], function () {      return window ?         defineLibraryA() :         defineLibraryB();  }); 

You could alternatively keep the libraryA and libraryB code separate by defining libraryAB this way.

// libraryAB.js dependency module define(["libraryA", "libraryB"], function (libraryA, libraryB) {      return window ? libraryA : libraryB;  });  //define libraryA.js and libraryB.js as usual 

If you want to avoid executing libraryA on the server or libraryB on the client, you could have these modules return functions and memoize the result if necessary.

The moral is that it's safest to keep all your non-standard code inside module definitions, keeping dependency lists nice and predictable.

</div
 
 
   
   

Связанный проблема

-1  Что не так с этим кодом jQuery, его сумасшедшая? [закрыто]  ( What is wrong with this jquery code its driving my crazy ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> закрыт. Этот вопрос не соответствует Рекомендациям переполнения ...

0  Google Map не отображает  ( Google map not displaying ) 
У меня есть карта Google, которая используется здесь: http://www.comehike.com/outdoors/birds/birds.php Теперь я вижу сообщения об ошибках .j для 1) Инициа...

0  JavaScript Ball Collision  ( Javascript ball collision ) 
Я пытаюсь создать простую игру JavaScript с простыми физиками. Я могу определить, когда 2 шарика столкнулись, но у меня возникли проблемы с обработкой столкно...

1  Удалить таблицу TR при сохранении AddClass  ( Remove table tr while maintaining addclass ) 
Хорошо, у меня есть таблица TR, которая удаляется, когда вы нажимаете кнопку. Я использую Animate.css и хотел бы добавить класс после того, как мой запрос AJA...

0  Почему Autoseizecolumn () Loop, похоже, замораживает сценарий Google Apps?  ( Why does an autoresizecolumn loop seem to freeze a google apps script ) 
Все, что я пытаюсь сделать, это изменить размер всеми колонны в электронной таблице. Это автономная электронная таблица. Я использую: <код> function format(...

0  Как вы загружаете файл JavaScript в объем  ( How do you load a javascript file into a scope ) 
Я пытаюсь выяснить, как загрузить содержимое файла JavaScript в объем. Причина этого я хочу иметь возможность иметь возможности подключения и воспроизведения ...

1  JavaScript: Получение идентификатора родителя из документа  ( Javascript getting the id of the parent from a document ) 
У меня возникли проблемы с тем, чтобы получить идентификатор родителя документа, который здесь «iFrame1». Как вы можете видеть, что JavaScript должен проживат...

0  Скрывая неупорядоченный список, когда у него нет элементов  ( Hiding an unordered list when it has no elements ) 
У меня есть проблема, которая кажется сначала, как общий язык No-Brainer и легкая задача. У меня есть плагин JavaScript на моей странице, который генерирует...

2  Fullcalendar сейчас () индикатор позиционируется неправильно  ( Fullcalendar now indicator positioned wrongly ) 
в Fullcalendar, при настройке параметров Mintime и maxtime ныне () индикаторы не расположены должным образом. У меня есть jsfiddle , чтобы пока...

59  Дисплей Div в положении курсора в Textarea [дубликат]  ( Display div at cursor position in textarea ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> Этот вопрос уже есть ответы здесь : ...

0  в то время как цикл превышает каждый метод  ( While loop over takes the each method ) 
Я добавляю элемент на страницу, используя статический номер в соответствии с кликом пользователя. Таким образом, элемент имеет серийный номер в соответствии с...

0  OnClick = "Commentcheck ({{Meeting.people}})", ожидаемый идентификатор, строка или номер  ( Onclick authoritycheckmeeting people expected identifier string or num ) 
У меня возникли проблемы с отправкой <код> {{meeting.people}} Value на функцию JS. Код подписан на Сообщение об ошибке говорит: ожидаемый идентификатор, ст...

1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp  ( Rapidmail subscription form redirect after email subscription mailchimp ) 
Я создаю веб-страницу, которая включает в себя очень простую форму подписки, в основном собирая адреса электронной почты, заинтересованные в продукте. Для это...

30  Как я могу использовать Nodejs с Windows 7? [закрыто]  ( How can i use nodejs with windows 7 ) 
<в сторону CLASS = "S-NEWACTS S-WELTIVE__info JS-Post-New Imide MB16« Роль = «Статус»> <Путь d = "M15 6.38A6.48 6.48 0 007.78. 04H-.02A6.49 6.49 0 002.05 ...

0  Обновление происхождения перетаскивания / прокрутки после обновления данных с переходом в D3  ( Update drag scroll origin after an update of the data with transition in d3 ) 
Я работаю на диаграмме с перетаскиванием, масштабированием и обновлениями. Это в основном работает, однако, после добавления новых данных позиция перетаскиван...

Связанный проблема

-1  Что не так с этим кодом jQuery, его сумасшедшая? [закрыто] 
0  Google Map не отображает 
0  JavaScript Ball Collision 
1  Удалить таблицу TR при сохранении AddClass 
0  Почему Autoseizecolumn () Loop, похоже, замораживает сценарий Google Apps? 
0  Как вы загружаете файл JavaScript в объем 
1  JavaScript: Получение идентификатора родителя из документа 
0  Скрывая неупорядоченный список, когда у него нет элементов 
2  Fullcalendar сейчас () индикатор позиционируется неправильно 
59  Дисплей Div в положении курсора в Textarea [дубликат] 
0  в то время как цикл превышает каждый метод 
0  OnClick = "Commentcheck ({{Meeting.people}})", ожидаемый идентификатор, строка или номер 
1  Форма подписки Rapidmail перенаправляет после подписки электронной почты - MailChimp 
30  Как я могу использовать Nodejs с Windows 7? [закрыто] 
0  Обновление происхождения перетаскивания / прокрутки после обновления данных с переходом в D3