2016-07-29 85 views
0

我徒劳地遍布谷歌如何加载木偶v3的pre.4 - 最新版本到现在(2016日) - 与RequireJS使用RequireJS加载Marionette(v3)的正确方法是什么?

库的捆绑版本似乎是RequireJS被打破,所以我必须手动包括“backbone.babysitter”和“backbone.radio”,这都需要这个版本的木偶的。

据:versioneye.com我需要:

  • backbone.babysitter1.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 

我选择了第二届一个这样的:

? 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为AMD模块设置的'shim'是* undefined *。它*可能*无效,或*可能*导致不良行为。 – Louis

+0

够公平的。我实际上并没有使用RequireJS,但是正在使用OP示例。 –

相关问题