npm 包管理的大坑

2015-03-04 23:33:56 +08:00
 love
最近一段时间在学nodejs,一路填了一些坑,今天又被一坑浪费了半天。

npm的包和python之类的不同,它是层次式的,就是说我依赖A包和B包,A包也依赖B包,这时会在A包目录下会有一个重复的B包,这时问题来了,会在内存中同时有二个B包,而A包里的B包和我这边的B包会有冲突(因为我在用A的过程中难免会间接用到里面的B包)。

之前在用gulp时发生过这种问题,今天在用material-ui包时也有问题。因为我本身依赖react包,而maerial-ui也有一份react,这时诡异的问题就来了啊!!!用Menu组件也会出现异常(即使用在一个最简单的例子里),把node_modules/material-ui/node_modules/react删除就正常了(因为这样的话就会用顶层的react包)。

总之,npm这样的方式我觉得坏处大于好处,解决API冲突不应该用这种方式,一个包公开发行后应该兼容老版本,实在不行就新命名,也比到处复制不同版本的代码强。
5323 次点击
所在节点    Node.js
15 条回复
yangff
2015-03-04 23:43:39 +08:00
不同包之间是隔离的啊。。按道理说material-ui不应该把他用的react暴露出来。。
love
2015-03-04 23:46:07 +08:00
@yangff 大部分是隔离的,但有很多情况不是。material-ui是react的组件包,我用它创建出来的组件用在外面的那份react应用里不就打破隔离了?
yangff
2015-03-04 23:51:05 +08:00
@love 我没用过react。所以并不了解具体情况。。
但是这种情况material-ui并没有必要也不应该自己再依赖一份react,作为组件这问题可大了。万一react的函数有副作用。。
放到devdepandence还差不多吧。。
yangff
2015-03-04 23:53:53 +08:00
我看了一下。。他用的peerDependencies,这没问题啊。
love
2015-03-05 00:03:02 +08:00
@yangff 嗯我发现问题了。material-ui把react放在peerDependencies里,这应该不会在下面包含react,可是在我这里奇怪地包含了,我想想我是怎么搞成这样的。
love
2015-03-05 00:17:20 +08:00
@yangff 奇怪了怎么也复现不出来material-ui下面含react的效果了,把bash history里原样命令回放一遍也不行,难道和我下午更新了iojs版本从1.3x到1.4x有关。
robertlyc
2015-03-05 00:36:32 +08:00
默认隔离 请自行检查自己的配置
youxiachai
2015-03-05 00:48:41 +08:00
卡网络了。。部分包下了一半。。。
qq286735628
2015-03-05 01:12:40 +08:00
我只知道硬盘不够空间的时候,删除历史项目们的node_modules,腾空了10个G
denghongcai
2015-03-05 01:16:25 +08:00
我也是material-ui和react一起用的,没问题啊
mcfog
2015-03-05 08:41:31 +08:00
首先有个npm dedup的操作会自动计算重复并提升

然后就是正常情况是不会影响的,除非b库作死(比如修改String.prototype的colors)
fansekey
2015-03-05 09:36:29 +08:00
@youxiachai NPM 是经常被阻或者自阻,其稳定性堪忧。
robertlyc
2015-03-05 09:59:21 +08:00
@fansekey 有国内源
LeeeeeeezQ
2015-03-05 13:16:07 +08:00
楼主是把 require('react') 写成 require('React') 了吧。
fansekey
2015-03-12 07:57:34 +08:00
@robertlyc 国内那些源我碰到过多起不同步的现象,就等 NPM3 能从根本上解决这些问题吧。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/174550

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX