Я тестирую requireJS и пытаюсь сделать простой проект с использованием высоких диаграмм. Я начал с requireJS multipage example project в качестве отправной точки.Сохранение зависимости jQuery для высоких диаграмм с помощью оптимизатора requireJS
My dir структура выглядит так же, как базовая структура, с highstock.js, добавленным в каталог lib.
- page1.html: страница 1 приложения.
- страница2.html: стр. 2 приложения.
- JS
- приложение: каталог для хранения модулей для приложений.
- lib: каталог для хранения сторонних модулей, таких как jQuery.
- common.js: содержит конфигурацию requirejs, и это будет цель построения для набора общих модулей.
- страница1.js: используется для передачи данных для страницы1.html. Грузы общего модуля, а затем загружает приложения/main1, основной модуль для страницы 1.
- page2.js: используется для данных магистрали для page2.html. Нагрузки общего модуля, а затем загружает приложения/main2, основной модуль для страницы 2.
common.js содержит настройки, и я добавил подкладку для highstock там:
requirejs.config({
baseUrl: 'js/lib',
paths: {
app: '../app'
},
shim: {
"highstock": {
"exports": "Highcharts",
"deps": [ "jquery"]
},
} // end Shim Configuration
});
Я также использую базовый файл сборки с добавлением строки для установки common.js в качестве файла конфигурации, а другой - для отключения мини-кода.
optimize: "none",
mainConfigFile: '../www/js/common.js',
В приложениях/main1.js Я добавил var HighCharts= require('highstock');
, а затем я пытаюсь использовать его.
Когда я запускаю это в обычной сборке, все работает нормально. Все зависимости хранятся и все загружается.
Когда я пытаюсь оптимизировать свою сборку, highcharts не получает зависимости jQuery. Я думаю, я понимаю, почему это происходит, но я не уверен, как это исправить.
My build создает 3 файла, common.js, page1.js и page2.js.
Соответствующие части выхода сборки:
js/lib/../common.js
----------------
js/lib/../common.js
js/lib/jquery.js
...
js/lib/../page1.js
----------------
js/lib/../page1.js
js/lib/highstock.js
js/app/main1.js
...
Моя страница затем ссылается на встроенный page1. Когда он пытается загрузить модуль highstock, он выдает ошибку, поскольку jQuery еще не загружен/недоступен.
Когда я вижу встроенную страницу1, я могу понять, почему.
require(['./common'], function (common) {
require(['app/main1']); //highcharts is in main1 in the non-optimized version
});
define("../page1", function(){});
//a few more defines
(function() { // start highcharts module definition HERE
Таким образом, вместо того, чтобы быть определены в функции обратного вызова после того, как общие (в том числе JQuery) было загружено, его загружен после выполнения запроса, но до того, как обратный вызов выполняется.
Мой вопрос: почему это происходит там, а не внутри обратного вызова (где оно загружается в неоптимизированной версии). Я попробовал несколько опций в файле build.js и файле конфигурации, и мне кажется, что отсутствует ключевая концепция или небольшая ошибка.
Извините за очень длинный вопрос, но я чувствовал, что вся информация необходима. Если вам нужна дополнительная информация, я могу опубликовать ее или избавиться от чего-то лишнего.
На странице Вы связываетесь в качестве отправной точки есть оговорка: «Если вы хотите использовать регулировочную шайбу конфигурации, например, для загрузки Backbone, см. пример requirejs/example-multipage-shim. Этот проект не будет работать с конфигурацией shim. Этот проект лучше всего работает, когда все зависимости являются модулями AMD ». https://github.com/requirejs/example-multipage-shim Вы видели это? –
Нет, пропустил. Я посмотрю спасибо! –