这个问题比较偶然,所以在这里记录一下。
这个ionic项目有一个pdf查看的功能,用到了插件ng2-pdf-viewer这个插件,之前在android上跑的一直是好好的,但是最近突然有人反馈在ios上查看不了pdf了。拉取项目,打包后打开这个项目,爆了一个rxjs的错,在网上查找后,将rxjs的版本由5.1.1改为5.5.2,然后项目可以跑了,但是项目在构建时又出现一个错,
ionic-img-viewer/dist/es2015/src/module.d.ts, found version 4, expected 3
截取的,就是这么一个错,在墙内没找到我想要的,墙外又不定期的进不去,最终无果;
我用自己早先(半年以前)npm install拿下来的node_module来编译项目,android这边是OK的,然后我在当前环境下执行了
ionic build ios
拿到ios项目,然后让别人打包,运行出来是OK的,这么说来那就是node_module出了问题,
就去排查node_module,我发现能运行的node_module中的ng2-pdf-viewer的版本是1.1.4,而我的package.json中明明定义的是1.1.0,不能运行的node_module中的版本是1.2.7(关于这个package.json的问题后面再说)
最终我将能运行的1.1.4放到不能运行的中去,抛开别的问题,是可以用的
这里还涉及到了另一个插件ionic-img-viewer,也是版本问题,他在2.9.x的版本中必须要求使用angluar要求必须要在5.+以上的版本,而我们的定位则低于5.+
此种种种,都是版本惹的祸
ng2-pdf-viewer在版本1.2.2是个分界线,要额外注意
最终才发现是当初别人开发这个项目的时候,这几个的版本前面都是用的^符号,也就是中间版本始终保持最新,本来是好意,但是谁知以上两个控件都在中间版本出幺蛾子了,这种变动为什么不出个大版本???
因为这是从别人手里接过来的半成品,从来没接触过有package.json的相关项目,根本就不知道^和~这种东西,所以纠结了一天半,当初压根就没往这上面想。。。
参考: Node.js中package.json中库的版本号详解(^和~区别)