Bower覆盖依赖

mav*_*azy 6 underscore.js jointjs bower lodash

我有一个用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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我想添加Joint.js(http://www.jointjs.com/),这取决于lodash(下划线的替代品),但我无法弄清楚如何在我的配置中替换它,因为Marionette,Backbone ,以及其他一些库直接依赖于下划线.所以在加载下划线覆盖lodash,应用程序无法正常启动.

mav*_*azy 4

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

另外,作为一种解决方案,可以选择使用凉亭挂钩,就像下面的答案中所述 /sf/answers/1630248931/

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

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

{
    "directory": "app/bower_components",
    "scripts": {
        "postinstall": "rm -rf app/bower_components/underscore"
    }
}
Run Code Online (Sandbox Code Playgroud)

这有点像黑客,但有效。

  • 请注意,从 1.4 版本开始。Bower 的您应该能够将ignoreDependency 数组添加到您的 Bower.json 中 (2认同)