使用browserify让nower与npm一起工作
大量的JavaScript包pipe理解决scheme都让我们感到非常高兴和诅咒,它们都有各自的优点。 由于在这里无关紧要的原因,我已经解决了我的主要解决schemenpm。 但是,在其他系统(如bower和component)上有太多好的代码可以忽略这些解决scheme。 所以,我正在设置一个环境,我可以使用browserify从npm和bower中加载软件包(我们将保存另一个问题的组件)。
到目前为止最好的方法是使用运行bower install
的postinstall
脚本来设置我的package.json
:
{ ... configuration ... "scripts": { "postinstall": "bower install" } }
这在安装第一级依赖关系(即strait bower dependencies和strait npm dependencies)时build立了正确的目录结构:
- MyMixedComponent - main.js - package.json - node_modules - npmDependency - bower_components - bowerComponent
在browserify , browserify -t debowerify
使用debowerify变换可以很好地构build,但是,当我想从另一个项目中的npm install MyMixedComponent
, npm install MyMixedComponent
,目录结构的构build方式和npm一样:
- MyNewProject - main.js - package.json - node_modules - MyMixedComponent - main.js - package.json - node_modules - npmDependency - bower_components - bowerComponent
由于bower是一个平坦的依赖关系树,所以当尝试使用browserify和debowerify进行构build时,这当然不起作用。 实际上需要的是这样的:
- MyNewProject - main.js - package.json - node_modules - MyMixedComponent - main.js - package.json - node_modules - npmDependency - bower_components - bowerComponent
或者,可以修改debowerify以识别多个bower目录,但是这样会打败bower的可爱特征,那就是平坦的树,这对于前端依赖性来说更好。 任何关于这可能如何工作的想法,或者我应该只是祈祷我们有一天会同意依赖pipe理?
在同一个代码库中有多个bower_components的想法有可能导致某些特定框架的重复。
尝试走下去的道路:
- 在我的当前软件包中安装混合(npm和bower)软件包时,
- 像往常一样安装npm(嵌套),
- 并且,对于来自混合包装
bower install
的每个凉亭组件bower install
到当前包的根部 - 一个交互式的npm postinstall脚本 ,可以改变当前包的bower.json
- 并警告用户进行凉亭安装,因为bower.json现在更新了您的其他npm / bower混合包中的组件