最近一段时间在学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冲突不应该用这种方式,一个包公开发行后应该兼容老版本,实在不行就新命名,也比到处复制不同版本的代码强。
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冲突不应该用这种方式,一个包公开发行后应该兼容老版本,实在不行就新命名,也比到处复制不同版本的代码强。