【发布时间】:2014-04-02 18:56:14
【问题描述】:
大量的 JavaScript 包管理解决方案让我们既受祝福又受诅咒,所有这些解决方案都有各自的优点。出于与这里无关的原因,我已选择 npm 作为我的主要解决方案。但是,其他系统(如 bower 和 component)上有太多好的代码,无法忽略这些解决方案。所以,我希望建立一个环境,我可以使用 browserify 从 npm 和 bower 加载包(我们将保存组件以解决另一个问题)。
到目前为止,我想出的最好方法是使用运行 bower install 的 postinstall 脚本设置我的 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