我有一个用Backbone编写的应用程序,使用Marionette和其他一些依赖项,通过 bower 进行管理:
{
"name": "admin",
"version": "0.1.1",
"main": "public/javascripts/app.js",
"dependencies": {
"lodash": "~2.4.1",
"console-polyfill": "~0.1.0",
"jquery": "~2.1.1",
"normalize-css": "~2.1.2",
"marionette": "~1.7.4",
"bootstrap": "~3.1.1",
"font-awesome": "~4.1.0",
"backbone-pageable": "~1.4.5",
"moment": "~2.5.1",
"swag": "~0.6.1",
"jquery-form": "~3.46.0",
"jquery-file-upload": "~9.5.7",
"underscore.string": "~2.3.3",
"bootstrap-switch": "~3.0.1",
"joint": "~0.9.0"
},
"overrides": {
"backbone": {
"dependencies": {
"lodash": "*",
"jquery": "*"
},
"main": "backbone.js"
},
"backbone.wreqr": {
"dependencies": {
"backbone": "*"
},
"main": "lib/amd/backbone.wreqr.js"
},
"backbone-pageable": {
"dependencies": {
"backbone": "*"
},
"main": "lib/backbone-pageable.js"
},
"jquery-file-upload": {
"dependencies": {
"jquery": "*"
},
"main": [
"js/vendor/jquery.ui.widget.js",
"js/jquery.iframe-transport.js",
"js/jquery.fileupload.js"
]
},
"underscore.string": {
"dependencies": {
"lodash": "*"
},
"main": "lib/underscore.string.js"
},
"joint": {
"dependencies": {
"lodash": "*"
},
"main": "dist/joint.clean.js"
}
},
"resolutions": {
"jquery": "~2.1.1"
}
}
我想添加 Joint.js (http://www.jointjs.com/),这取决于 lodash (替换下划线),但我无法弄清楚如何在我的配置中替换它,因为Marionette,Backbone和其他一些库直接依赖于下划线。所以在加载下划线覆盖lodash,应用程序无法正常启动。
答案 0 :(得分:4)
我已经改变了顺序,并将lodash作为最新的依赖项,并且它有效。
同样作为解决方案,有一个选项可以有一个凉亭钩子,就像它在下面的答案中所述 https://stackoverflow.com/a/23289270/575338
我们遇到类似的情况,我们让Backbone依赖于Underscore 在
bower.json
,但我们正在使用Lo-Dash,所以Bower 每次安装都不必要地拉下Underscore。我们有 自动检查第三方许可证合规性,因此我们不想要 我们实际上没有使用的任何东西。我意识到这不是他们的意思,而是Bower的 install-hooks 可以用来在安装后清理不需要的deps(至少直到Bower 得到你所暗示的那种“不,谢谢”的决议。在你的
.bowerrc
:{ "directory": "app/bower_components", "scripts": { "postinstall": "rm -rf app/bower_components/underscore" } }
这有点像黑客,但有效。