Browserify-shim依赖项未定义?

时间:2014-04-16 18:15:03

标签: javascript browserify

我正在尝试将现有应用程序分解为模块。我选择使用Browserify来做这件事,因为它的语法很好地模仿了NodeJS。

我的项目取决于几个外部模块,其中一个是Backbone。因此,我正在使用browserify-shim。但是,我遇到了问题。

在我的package.json中,我定义了以下内容:

```

  "browserify": {
    "transform": [
      "browserify-shim"
    ]
  },
  "browser": {
    "jQuery": "public/js/vendor/jquery-2.0.3.min.js",
    "lodash": "public/js/vendor/lodash.js",
    "Backbone": "public/js/vendor/backbone-1.1.2.js"
  },
  "browserify-shim": {
    "jQuery": "global:$",
    "lodash": "_",
    "Backbone": {
      "exports": "global:Backbone",
      "depends": [
        "jQuery",
        "lodash"
      ]
    },
    "BackboneLocalStorage": {
      "depends": [
        "Backbone"
      ]
    }
  },

```

在我的一个文件中,我需要这样的Backbone:

var Backbone = require('Backbone');

编译我的软件包时,Browserify不会抱怨,所以一切都很好。但是,在浏览器中加载我的应用程序时,我收到错误Cannot read property 'Model' of undefined(我在那里打电话Backbone.Model.extend())这对我​​来说没什么用。

当我将"exports": "global:Backbone",更改为"exports": "Backbone",时,Browserify将停止并显示消息

Error: module "Backbone" not found

我不知道我做错了什么,我觉得Browserify-shim文档在这里帮助不大。他们给出了一个很好的例子,但是没有真正解释发生了什么或者会导致这样的错误。谁能开导我?

1 个答案:

答案 0 :(得分:4)

我相信你使用的是Browserify-shim 3.0,因为你的package.json中有配置(如果我错了,请纠正我)。基于3.0的文档,exposing a global config似乎向垫片表明您已从包外包含库;在示例的情况下,从CDN包括three.js.

尝试删除全局:所以它显示为:

"Backbone": {
  "exports": "Backbone",
  "depends": [
    "jQuery",
    "lodash"
  ]
},

或者可能放弃整个出口部分。 Backbone的另一个挑战是确保正确exposed Backbone's $ property

我自己一直在玩这个,我同意这些文档......充其量是令人困惑的。在我的情况下,我只是简单地使用--save安装Backbone和jQuery,并且需要那些没有垫片的两个(我的插件等和jQuery现在已经整理,但不是Backbone本身)。

希望这有帮助!