终于受不了npm的安装速度了,每次发布的耗时都能吃顿饭,让运维配合更换cnpm后查看输出日志却还是npm的格式,而不是npminstall的格式。
运维给出了服务器上的执行脚本
LD_LIBRARY_PATH="/opt/gcc/lib64:/opt/gcc/lib:$LD_LIBRARY_PATH" export LD_LIBRARY_PATH NPM="/opt/node/bin/cnpm --unsafe-perm --registry=http://registry.npm.qima-inc.com" $NPM install
看上去并没有什么问题,本地带相同的参数也能够正常调用npminstall。
怀疑cnpm版本问题,但是运维给出cnpm -v是4.4.0
后来在postinstall的hook里输出process.env,发现有shrinkwrap的设置,而npminstall是不支持shrinkwrap的,但是本地即使添加shrinkwrap也不会让cnpm回退npm。
后来去查看cnpm的源码,发现cnpm判断的是第一个参数是否为i或者install,如果是的话就调用npminstall,否则回退npm,于是尝试调整参数顺序,发现真的只有当使用cnpm install --unsafe-perm --registry
的时候才会成功调用npminstall,install位于其他位置均会回退npm