avatar
@bangbang93

修复cnpm install命令回退npm而不是使用npminstall进行快速安装

11/7/2016, 5:50:35 PM

终于受不了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