RequireJS, как указать зависимость shim из раздела пакета файла jam
Я работаю в проекте с магистральным шаблоном, который использует RequireJS для загрузки модулей и JamJS для управления ими. Мои требуют config.js
Файл выглядит следующим образом:
require.config({
deps: ["../vendor/jam/require.config", "main"],
paths: {
"backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage"
},
shim: {
"backbone.localStorage": {
deps: ['backbone']
}
}
});
Как вы можете видеть, загрузка конфигурации RequireJS из файла конфигурации jam jam/require.config.js
который указывает магистраль, jquery и подчеркивание. Следующая часть файла:
"packages": [
{
"name": "backbone.layoutmanager",
"location": "../vendor/jam/backbone.layoutmanager",
"main": "backbone.layoutmanager.js"
}
{
"name": "backbone",
"location": "../vendor/jam/backbone",
"main": "backbone.js"
}
],
"version": "0.2.11",
"shim": {
"backbone.layoutmanager": {
"deps": [
"jquery",
"backbone",
"lodash"
],
"exports": "Backbone.LayoutManager"
}
"backbone": {
"deps": [
"jquery",
"lodash"
],
"exports": "Backbone"
}
}
};
Что я хочу, это указать в моем config.js
Библиотека backbone.localStorare зависит от магистрали, определенной в разделе пакета. Также, если я укажу путь магистрали следующим образом, он найдет библиотеку магистралей, но будет найдено сообщение об ошибке, говорящее, что подчеркивание не загружено:
require.config({
deps: ["../vendor/jam/require.config", "main"],
paths: {
"backbone": "../vendor/jam/backbone/backbone",
"backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage"
},
shim: {
"backbone.localStorage": {
deps: ['backbone']
}
}
});
Я мог бы добавить библиотеку backbone.localStorage, используя jamjs, но версия доступного пакета устарела, поэтому я предпочитаю загружать последний вручную и включать вручную.
Любые идеи или помощь будут оценены.
2 ответа
Магистраль нуждается в подчеркивании и jQuery:
shim: {
"backbone": {
"deps": [ "underscore", "jquery" ],
"exports": "Backbone" //attaches "Backbone" to the window object
},
"underscore": {
"exports": "_"
}
}
Поэтому я думаю, что лучше всего адаптировать свой jam/require.config.js
,
Редактировать:
Далее packages
раздел в вашем вопросе, это часть jam/require.config.js
? Является ли местоположение относительно местоположения jam/require.config.js
?
Вы пытались добавить packages
раздел в вашем собственном config.js:
"packages": ["backbone", "backbone.layoutmanager"]
Благодаря Asgoth я могу решить проблему. Я положил файлы ниже.
С этой конфигурацией я могу разместить библиотеки config.js
файл, который зависит от пакетов, управляется джемом на require.config.js
файл.
config.js
// Set the require.js configuration for your application.
require.config({
// Initialize the application with the main application file and the JamJS
// generated configuration file.
deps: ["../vendor/jam/require.config", "main"],
// Packeges defined at jam/require.config.js required by shim libraries
packages: [
{"name" : "backbone"},
{"name" : "jquery"}
],
paths: {
// Put paths here.
"codemirror" : "../vendor/codemirror-3.0/lib/codemirror",
"codemirror-markdown": "../vendor/codemirror-3.0/mode/markdown/markdown",
"backbone.localStorage": "../vendor/backbone.localStorage-1.0/backbone.localStorage",
"bootstrap" : "../vendor/bootstrap-2.2.2/js/bootstrap"
},
shim: {
// Put shims here.
"codemirror-markdown": {
deps: ["codemirror"]
},
"backbone.localStorage": {
deps: ['backbone']
},
"bootstrap": {
deps: ['jquery']
}
}
});
require.config.js
var jam = {
"packages": [
{
"name": "jquery",
"location": "../vendor/jam/jquery",
"main": "jquery.js"
},
{
"name": "backbone.layoutmanager",
"location": "../vendor/jam/backbone.layoutmanager",
"main": "backbone.layoutmanager.js"
},
{
"name": "underscore",
"location": "../vendor/jam/underscore",
"main": "underscore.js"
},
{
"name": "backbone",
"location": "../vendor/jam/backbone",
"main": "backbone.js"
},
{
"name": "lodash",
"location": "../vendor/jam/lodash",
"main": "./lodash.js"
}
],
"version": "0.2.11",
"shim": {
"backbone.layoutmanager": {
"deps": [
"jquery",
"backbone",
"lodash"
],
"exports": "Backbone.LayoutManager"
},
"underscore": {
"exports": "_"
},
"backbone": {
"deps": [
"jquery",
"lodash"
],
"exports": "Backbone"
}
}
};
if (typeof require !== "undefined" && require.config) {
require.config({packages: jam.packages, shim: jam.shim});
}
else {
var require = {packages: jam.packages, shim: jam.shim};
}
if (typeof exports !== "undefined" && typeof module !== "undefined") {
module.exports = jam;
}