【问题标题】:Make bower work with npm using browserify使用 browserify 使 bower 与 npm 一起工作
【发布时间】:2014-04-02 18:56:14
【问题描述】:

大量的 JavaScript 包管理解决方案让我们既受祝福又受诅咒,所有这些解决方案都有各自的优点。出于与这里无关的原因,我已选择 npm 作为我的主要解决方案。但是,其他系统(如 bower 和 component)上有太多好的代码,无法忽略这些解决方案。所以,我希望建立一个环境,我可以使用 browserify 从 npm 和 bower 加载包(我们将保存组件以解决另一个问题)。

到目前为止,我想出的最好方法是使用运行 bower installpostinstall 脚本设置我的 package.json

{
  ... configuration ...

  "scripts": {
    "postinstall": "bower install"
  }
}

这在安装一级依赖(即strait bower依赖和strait npm依赖)时构建了正确的目录结构:

- MyMixedComponent
  - main.js
  - package.json
  - node_modules
    - npmDependency
  - bower_components
    - bowerComponent

使用 browserify 上的 debowerify 转换可以很好地构建,browserify -t debowerify 但是,当我想在另一个项目中从 npm 安装 MyMixedComponent npm install MyMixedComponent 时,目录结构的构建与您对 npm 的期望一样:

- MyNewProject
  - main.js
  - package.json
  - node_modules
    - MyMixedComponent
      - main.js
      - package.json
      - node_modules
        - npmDependency
      - bower_components
        - bowerComponent

由于 bower 是一个扁平的依赖树,当尝试使用 browserify 和 debowerify 构建时,这当然不起作用。实际需要的是这样的:

- MyNewProject
  - main.js
  - package.json
  - node_modules
    - MyMixedComponent
      - main.js
      - package.json
      - node_modules
        - npmDependency
   - bower_components
     - bowerComponent

或者可以修改 debowerify 以识别多个 bower 目录,但这会破坏 bower 的可爱特性,即它是一棵扁平树,这对于前端依赖项要好得多。关于这如何工作的任何想法,或者我应该祈祷我们有朝一日就依赖管理达成一致?

【问题讨论】:

  • @PaulSweatte 您提到的问题涉及 Angular 的最佳实践与 AMD/CommonJS 模块范例之间的冲突。这个问题旨在纠正包管理系统的冲突结构;一个分层(npm)和一个平面(凉亭)。我的目标是在项目中利用这两个系统,同时保持模块化。即,当项目被视为独立或库时,依赖项会正确加载。
  • 在这种情况下,this idea 可能适合您。
  • 您是否尝试过使用带有 browserify 的“napa”来访问 bower 包?而且,是的,我不太明白您的要求,但它似乎是在该域中使用的工具。
  • 为什么不同时使用两者并使用grunt 实现自动化?

标签: node.js npm bower commonjs browserify


【解决方案1】:

在同一个代码库中拥有多个 bower_components 的想法存在引入某些特定框架的重复项的风险。

尝试沿着这条路走:

  1. 将混合(npm 和 bower)包安装到我当前的包中时,
  2. 照常安装 npm(嵌套),
  3. 对于每个 bower-component 从混合包 bower install 到当前包的根目录
  4. interactive npm postinstall script,可以改变当前包的 bower.json
  5. 并警告用户安装 bower,因为 bower.json 现在已使用其他 npm/bower 混合包中的组件进行更新

【讨论】:

  • 我想知道是否有办法避免修改根包的 bower.json,因为它可能在版本控制之下。也许只需为每个嵌套依赖项运行bower install <package>。对于在自己的 bower_components 目录中查找的嵌套包,仍然会得到重复的代码:/
猜你喜欢
  • 1970-01-01
  • 2014-08-02
  • 1970-01-01
  • 2018-08-21
  • 1970-01-01
  • 2015-04-27
  • 2014-07-04
  • 2015-03-13
  • 1970-01-01
相关资源
最近更新 更多