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