2016-07-29 38 views
0

ich vergeblich ganzes Google gesucht, wie Mariov3-pre.4 laden - bis jetzt neueste Version (Juli 2016) - mit RequireJS.Was ist der richtige Weg Marionette (v3) mit RequireJS zu laden?

Die mitgelieferte Version der Bibliothek scheint für RequireJS gebrochen werden so muss ich manuell „backbone.babysitter“ und „backbone.radio“, die für diese Version des Puppen erforderlich sind, umfassen.

Nach: versioneye.com ich brauche:

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

Also habe ich versucht, die Installation m mit Bower:

Bower installieren backbone.babysitter

Es zurückgegeben:

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 

wähle ich die 2. ein wie folgt aus:

? Answer !2

Er kehrte:

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

Ich habe genau das gleiche mit backbone.radio:

Bower installieren backbone.radio

Retour:

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 

Ausgewählt:

? Antwort 2

Retour:

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

Alles schien in Ordnung zu sein, aber wenn ich überprüft die Version für diese beiden Bibliotheken in jeder ist „bower.json“ Datei, fand ich heraus, dass:

Rückgrat.Babysitter ist:

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

und backbone.radio:

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

Wo habe ich falsch gemacht?

Das ist mein 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" 
    } 
} 

Das ist mein Shim-Datei:

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' 
    } 
    } 
}) 

Und das ist, wie ich Module mit RequireJS laden in meiner app.js Datei :

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

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

    return { 
    init: init 
    } 
}) 

Aaand t ies ist der Fehler, den ich in meinem Browser immer halten:

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

Und dieses nach ein paar Sekunden:

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

+0

Haben Sie versucht [Browserify] (http://browserify.org/)? Wird es viel weniger schmerzhaft machen. – Tholle

+1

Browserify ist mein Favorit, aber ich muss RequireJS aus einigen administrativen Gründen verwenden. Danke für den Tipp tho! –

Antwort

2

Statt ../bower_components/backbone.babysitter/src/build/backbone.babysitter Verwendung ../bower_components/backbone.babysitter/lib/backbone.babysitter

1

Wenn jemand läuft in diesem, v3.0 geändert, um Babysitter zu entfernen

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

Eines der Grundprinzipien der Verwendung von RequireJS: 'shim' ist nur für Nicht-AMD-Module (Code, der' define' nicht als AMD-Modul anmeldet). Jede einzelne Scheibe, die Sie dort haben, ist überflüssig. Was RequireJS mit einem 'Shim'-Set für ein AMD-Modul macht, ist * undefined *. Es * kann * keine Wirkung haben, oder es * kann * zu unerwünschtem Verhalten führen. – Louis

+0

Fair genug. Ich benutze eigentlich nicht RequireJS, sondern gehe vom OP-Beispiel ab. –