重新梳理项目中的包依赖时,觉得使用^或者~在正式项目中似乎不靠谱,因为永远不知道真正打包的结果是不是对的。一个没有什么安全的感人,总能想到很多风险,例如有个家伙在新版本中恶意注入了"rm * -rf"这样的代码,那么我们的项目不是悲剧了。为了稳妥,我锁住了所有依赖的版本。根据npm的机制而言,这样还是堵不住所有入口的,除非把所有的依赖包的package.json中的版本依赖也锁住。当然这是不可能的。不过,风险还是会小一点的。

很快就改好了package.json的内容,然后把项目跑起来(希望上帝保佑吧)遗憾的是,出现错误:

ERROR in ./~/rc-tooltip/lib/Tooltip.js
Module not found: Error: Cannot resolve module 'babel-runtime/helpers/classCallCheck' in \node_modules\rc-tooltip\lib
 @ ./~/rc-tooltip/lib/Tooltip.js 15:23-70

ERROR in ./~/rc-tooltip/lib/Tooltip.js
Module not found: Error: Cannot resolve module 'babel-runtime/helpers/possibleConstructorReturn' in \node_modules\rc-tooltip\lib
 @ ./~/rc-tooltip/lib/Tooltip.js 19:34-92

ERROR in ./~/rc-tooltip/lib/Tooltip.js
Module not found: Error: Cannot resolve module 'babel-runtime/helpers/objectWithoutProperties' in \node_modules\rc-tooltip\lib
 @ ./~/rc-tooltip/lib/Tooltip.js 11:32-88

看上面的错误信息是babel-runtime的问题,一下子懵逼了,之前是对的,怎么锁住版本好后,babel-runtime就跪了?马上看看babel-runtime的源码,发现确实没有classCallCheck等文件,难道版本有问题?看了一下版本,发现babel-runtime的版本居然是4.7.3,什么鬼!现在的版本已经是6.23.0,绝对是不对的。再看看babel-runtime的依赖来源,发现是一个'confit'的组件中引用的,那么就是rc-tooltip和confit这两个组件引用babel-runtime有冲突。
解决方案:
在项目package.json中定义babel-runtime的版本为6.23.0


lingxuan630
203 声望8 粉丝