6

我有一个应用程序,用 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,应用程序无法正确启动。

4

1 回答 1

4

我已经更改了顺序,并将 lodash 作为最新的依赖项,它起作用了。

同样作为一种解决方案,可以选择使用凉亭挂钩,就像它在以下答案中所述 https://stackoverflow.com/a/23289270/575338

我们遇到了类似的情况,我们的 Backbone 依赖于 Underscore bower.json,但我们使用 Lo-Dash 代替它,因此 Bower 不必要地为每次安装拉下 Underscore。我们对 3rd 方许可证合规性进行了自动检查,因此我们不想要任何我们实际上不使用的东西。

我意识到这并不完全是它们的意思,但是 Bower 的 安装挂钩 可用于在安装后清理不需要的 deps(至少在 Bower 得到你暗示的那种“不,谢谢”解决方案之前)。在你的 .bowerrc

{
    "directory": "app/bower_components",
    "scripts": {
        "postinstall": "rm -rf app/bower_components/underscore"
    }
}

这有点骇人听闻,但有效。

于 2014-07-02T07:18:37.673 回答