2016-04-29 2 views
-1

Я не могу получить bundles для работы в оптимизированной сборке, я пытаюсь загрузить некоторый внешний пакет (не входит в процесс вывода процесса сборки).requirejs и предварительно построенные пакеты

В requirejs.config:

paths: { 
    'mymodules': '../lib/test-bundle/test-bundle' 
}, 
bundles: { 
    'mymodules': ['mymodule1', 'mymodule2'] 
} 

test-bundle содержание:

console.log("defining modules..."); 

define('mymodule1', ['jquery'], function($) { 
    console.log('within mymodule1', $.fn.jquery); 
    return { 
     test: 'module1' 
    }; 
}); 

define('mymodule2', ['jquery'], function($) { 
    console.log('within mymodule2', $.fn.jquery); 
    return { 
     test: 'module2' 
    }; 
}); 

В сборки конфигурацииpaths для mymodules, mymodule1 и mymodule2 установлены на empty: (или в процессе сборки не в состоянии), Я не использую опцию modules в конфигурации build для создания пакетов.

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

Во встроенной версии (но не оптимизирован) test-bundle загружается и "defining modules" печататься, то тайм-аут загрузки mymodule2:

Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2(…) 
Uncaught Error: Failed to load root module (viewmodels/shell). Details: Load timeout for modules: mymodule2 
http://requirejs.org/docs/errors.html#timeout 

В построенном и оптимизированной версии есть еще одна ошибка:

Uncaught ReferenceError: define is not defined 

например, если test-bundle загружен до requirejs реализовать define().

Что мне не хватает или что-то не так?

редактировать

Я создал ветку с выше тест, чтобы установить и построить (nodejsnpm и, вероятно, grunt-cli необходимы в системе)

git clone https://github.com/xenogenesi/HTMLStarterKitPro 
cd HTMLStarterKitPro 
git checkout test-bundle 
# nodejs npm required on the system (maybe grunt-cli) 
npm install # required only once to install node modules 
grunt build-only # create a build/ directory and the content 
php -S localhost:8888 # to publish the sources as they are 
# browse to http://localhost:8888 
php -S localhost:7777 -t build # to publish the built versions 
# browse to http://localhost:7777 for built but not optimized 
# browse to http://localhost:7777/index2.html for built optimized 

(см this commit для всех файлов изменен, чтобы добавить тестовый комплект)

+0

[mcve] был бы полезен. Кроме того, какую версию RequireJS вы используете? Новые версии исправляют ошибки, присутствующие в старых версиях. – Louis

+0

@Louis, предоставляя минимальный пример, потребует усилий времени, а среда не будет одинаковой, поэтому, пожалуйста, см. Обновление, если вы знаете, как установить узел, npm, grunt-cli должен быть быстрым и легким. RequireJS version is 2.2.0 – Alex

ответ

0

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

Как говорится:

bundle config is for pointing multiple module IDs to a bundle's module ID. 
+0

Спасибо, я исправил свой конфиг, чтобы использовать * ID модуля * вместо пути и добавил его на «пути», но результат не изменился, я обновлю вопрос – Alex

-1

Таким образом, по-видимому, даже будучи require.js сам, загрузчик сразу включается в оптимизированной версии или, по крайней мере, вести себя по-другому.

Один простой способ заставить его работать, чтобы не включать в себя любой загрузчик и продолжать использовать требуют ножным стартером:

Gruntfile.js:

- name: 'requireLib', 
+ name: false, 

index2.html:

- <script src="app/main-built.js"></script> 
+ <script src="lib/require/require.js" data-main="app/main-built"></script> 

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

Смежные вопросы