2016-07-29 4 views
0

Я искал напрасно во всем Google о том, как загрузить марионеткаv3-pre.4 - последняя версия до сих пор (июль 2016) - с RequireJS.Каков правильный способ загрузки Marionette (v3) с RequireJS?

Связанная версия библиотеки, кажется, сломан для RequireJS так что я должен вручную включить «backbone.babysitter» и «backbone.radio», которые необходимы для данной версии марионеток.

По: versioneye.com мне нужно:

  • "backbone.babysitter" 1.0.0-pre.1и
  • "backbone.radio" * 2.0.0-pre.1 *

Поэтому я попытался установить м с Бауэр: установить

станового backbone.babysitter

Он вернулся:

Unable to find a suitable version for backbone.babysitter, please choose one by typing one of the numbers below: 
    1) backbone.babysitter#^0.1.12 which resolved to 0.1.12 
    2) backbone.babysitter#1.0.0-pre.1 which resolved to 1.0.0-pre.1 and is required by marionette#3.0.0-pre.4 

Prefix the choice with ! to persist it to bower.json 

Я выбрал 2-ую так:

? Answer !2

Он вернулся:

bower resolution Saved backbone.babysitter#1.0.0-pre.1 as resolution 

Я сделал то же самое с backbone.radio:

дачей установки backbone.radio

Возвращается:

Unable to find a suitable version for backbone.radio, please choose one by typing one of the numbers below: 
    1) backbone.radio#^1.0.5 which resolved to 1.0.5 
    2) backbone.radio#2.0.0-pre.1 which resolved to 2.0.0-pre.1 and is required by marionette#3.0.0-pre.4 

Prefix the choice with ! to persist it to bower.json 

Выбрано:

? Ответ 2

Возвращается:

bower resolution Saved backbone.radio#2.0.0-pre.1 as resolution 

Все вроде бы нормально, но когда я проверил версию для этих двух библиотек в каждом это «bower.json» файл, я узнал, что:

основа.няня находится по адресу:

"name": "backbone.babysitter", 
    "version": "0.1.11" 

и backbone.radio:

"name": "backbone.radio", 
    "version": "1.0.4" 

Где я ошибся?

Это мой bower.json:

{ 
    "name": "Example App", 
    "authors": "Consta Gorgan", 
    "dependencies": { 
    "backbone": "~1.2.3", 
    "backbone.radio": "~2.0.0", 
    "backbone.babysitter": "~1.0.0", 
    "marionette": "~3.0.0", 
    "requirejs": "~2.1.15", 
    "requirejs-plugins": "~1.0.2" 
    }, 
    "resolutions": { 
    "backbone.radio": "2.0.0-pre.1", 
    "backbone.babysitter": "1.0.0-pre.1" 
    } 
} 

Это моя шайба файл:

requirejs.config({ 
    paths: { 
    jquery: '../bower_components/jquery/dist/jquery', 
    underscore: '../bower_components/underscore/underscore', 
    backbone: '../bower_components/backbone/backbone', 
    'backbone.radio': '../bower_components/backbone.radio/build/backbone.radio', 
    'backbone.babysitter': '../bower_components/backbone.babysitter/src/build/backbone.babysitter', 
    marionette: '../bower_components/marionette/lib/core/backbone.marionette' 
    }, 
    shim: { 
    jquery: { 
     exports: '$' 
    }, 
    backbone: { 
     deps: [ 
     'underscore', 
     'jquery' 
     ], 
     exports: 'Backbone' 
    }, 
    underscore: { 
     exports: '_' 
    }, 
    marionette: { 
     deps: [ 'jquery', 'underscore', 'backbone', 'backbone.radio', 'backbone.babysitter' ], 
     exports: 'Marionette' 
    } 
    } 
}) 

И это, как я загрузить модули с RequireJS в моем app.js файл :

define([ 
    'jquery', 
    'underscore', 
    'backbone', 
    'marionette', 
    'router' 
], function ($, _, Backbone, Marionette, Router) { 
    'use strict' 

    var init = function() { 
    Router.init() 
    } 

    return { 
    init: init 
    } 
}) 

Aaand t его это ошибка, я получаю в моем браузере:

Cannot set property 'VERSION' of undefined - *image*

И это один через несколько секунд:

Load timeout for modules: backbone.radio - *image*

+0

Вы пробовали [Browserify] (http://browserify.org/)? Это сделает его намного менее болезненным. – Tholle

+1

Browserify - мой любимый, но я должен использовать RequireJS из-за некоторых административных причин. Спасибо за подсказку! –

ответ

2

Вместо ../bower_components/backbone.babysitter/src/build/backbone.babysitter использование ../bower_components/backbone.babysitter/lib/backbone.babysitter

1

Если кто-то работает в этом, v3.0 изменено для удаления няни

requirejs.config({ 
    paths: { 
     jquery: 'node_modules/jquery/dist/jquery', 
     underscore: 'node_modules/underscore/underscore', 
     backbone: 'node_modules/backbone/backbone', 
     'backbone.radio': 'node_modules/backbone.radio/build/backbone.radio', 
     marionette: 'node_modules/marionette/lib/backbone.marionette' 
    }, 
    shim: { 
     jquery: { 
      exports: '$' 
     }, 
     backbone: { 
      deps: [ 
       'underscore', 
       'jquery' 
      ], 
      exports: 'Backbone' 
     }, 
     'backbone.radio': { 
      deps: [ 
       'underscore', 
       'backbone' 
      ], 
      export: 'Radio' 
     } 
     underscore: { 
      exports: '_' 
     }, 
     marionette: { 
      deps: [ 'jquery', 'underscore', 'backbone', 'backbone.radio' ], 
      exports: 'Marionette' 
     } 
    } 
}); 
+0

Один из основных принципов использования RequireJS: 'shim' предназначен только для модулей без AMD (код, который не вызывает' define' для регистрации в качестве модуля AMD). У каждой отдельной прокладки есть избыток. То, что RequireJS делает с набором 'shim' для модуля AMD, равно * undefined *. Он * может * не иметь никакого эффекта или может * привести к нежелательному поведению. – Louis

+0

Достаточно честный. Я фактически не использую RequireJS, но уходил из примера OP. –

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