0

Я создаю библиотеку, которая представляет собой набор папок, содержащих файлы Javascript, содержащие Model View Controller.
каждый файл имеет зависимости объявляются с использованием требует синтаксис:Использовать requirejs в gruntjs для создания библиотеки и использовать ее в других проектах.

define([ 
    'modules/moduleA/src/moduleAModel', 
    'modules/moduleA/src/moduleAController', 
], function(moduleAModel, moduleAController) { 
    function moduleAView(param) { 
     // .... 
    } 

Я компиляции этой библиотеки с помощью GruntJS с большими «хрюкать-вно-requirejs».
Проблема в том, что в качестве библиотеки нет точки входа, нет основной.
Я хочу, чтобы пользователи могли использовать его, вызывая каждый модуль, когда ему это нужно.

Вот мои вопросы:

Во-первых:
Как я могу построить один файл яваскрипта для библиотеки, которая включает в себя все модули без объявления их один за другим?

Во-вторых:
Как я могу повторно использовать эту библиотеку позже на другом проекте? Я попытался это:

define(function(require) { 
    var myLibrary = require('js/external-libs/myMinifiedLibrary.min'); 
    var moduleAV = new moduleAView(); 

Но, конечно, вторая линия вышла из строя, есть что-то вроде require(myLibrary.moduleAView)?

Что вы предложите?

Update:
я узнал, что, когда вы уменьшенная на одном файле все модули, у вас есть несколько определяет на одной странице, это интерпретируется как сценарий для requirejs и вы должны загрузить его в два раза! (первый раз весь файл, второй раз ваш основной). Тогда моя «главная» или точка входа создается вручную (что все еще проблема) на самые яркие ответы. Так решение моей второй вопрос на этом посту:
http://jaketrent.com/post/dynamically-require-optimized-modules-requirejs/

ответ

1

У меня была другая проблема: Я хотел пользователей тянуть библиотеку и не должны знать о каждом internalmodule.

Для этого я создал единственную точку входа, которая возвращает parent module. Затем родитель обрабатывает отсрочку для детей по мере необходимости.

This file - это пункт входа.

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

define(
    ["layout", "region"], 
    function(Layout, Region){ 
     return { 
      "LayoutModule": Layout, 
      "RegionModule": Region 
     }; 
    } 
); 

Я думаю, что это то, что вы хотите:

  • в r.js оптимизатор создает все в один файл
  • другой код просто включает в себя файл библиотеки (require("myLib"))
  • каждый отдельный модуль доступен o n объект ответа (myLib.LayoutModule, myLib.RegionModule).
+0

Действительно интересно, он отвечает на мои второстепенные вопросы, но все же я должен был бы объявить каждый модуль в точке входа. Проблема заключается в том, что у меня есть основная папка библиотеки со многими файлами, но также и в каждом модуле optionnal у меня много файлов. Добавление новой строки каждый раз, когда я хочу добавить модуль, нарушит тот факт, что мой код modular – Tim

+0

@Tim Похоже, вы говорите что-то вроде: «Я хочу, чтобы загрузчик зависимостей загружал все мои зависимости, но я не хочу определять свои зависимости!» Ваш код по-прежнему модульный, но вы должны ПОСМОТРЕТЬ в своей библиотеке, какие модули ему нужны! – STLMikey

+0

@SLTMikey Я, вероятно, был не очень ясен, я не хочу определять свои зависимости вручную, когда я строю свою библиотеку, я хочу иметь все в одном файле. Также мои определения хорошо определены для каждого файла, проблема в том, что у меня много файлов. Я хочу, чтобы иметь возможность использовать эти модули, когда я использую эту библиотеку. – Tim