【问题标题】:Browserify-shim dependency undefined?Browserify-shim 依赖未定义?
【发布时间】:2014-04-16 18:15:03
【问题描述】:

我正在尝试将现有应用程序分解为模块。我选择使用 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 文档在这里没有多大帮助。他们给出了一个很好的例子,但并没有真正解释发生了什么或什么会导致这样的错误。谁能赐教?

【问题讨论】:

    标签: javascript browserify


    【解决方案1】:

    我相信您使用的是 Browserify-shim 3.0,因为您的 package.json 中有配置(如果我错了,请纠正我)。根据 3.0 的文档,exposing a global config 似乎向 shim 表明您已从捆绑包外部包含该库;在示例中,three.js 包含在 CDN 中。

    尝试删除 global: 所以它显示为:

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

    或者也许放弃整个出口部分。 Backbone 的另一个挑战是确保您拥有正确的exposed Backbone's $ property

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

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 2014-08-30
      • 1970-01-01
      • 2014-11-19
      • 1970-01-01
      • 2014-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多