如何提升npm安装包的速度 作者: 灯小笼 时间: 2018-05-23 分类: 前端 作为开发人员,日常的打包发版必不可少。作为前端人员的话,每次通过npm编译项目的时候,都得经过漫长的等待,才能守得云开月明。如果每天都需要经历这样的事情,你依然能够不为所动,只能说明,要么你很忙,要么,你真的很懒!!是时候对这样的局面做一些改动,加快打包编译发布的速度了。 ## 1、配置国内镜像 使用国内镜像,作为国内nodejs开发者,必不可少的常识。 npm ``` npm config set registry http://registry.npm.taobao.org ``` yarn ``` yarn config set registry http://registry.npm.taobao.org ``` ## 2、全局安装开发依赖包 比如说`node-sass`,每次安装都需要从github下载一个node包,然后用gcc编译很久,大部分的时间都在等待它的编译了,即使用了yarn,也没有多大成效。因此我们需要把这些开发依赖项变成全局安装,真正安装的时候只需要安装生产环境所需要的包即可。 ``` npm install --production yarn install --production ``` 全局安装的命令增加一个-g的选项即可,如安装bower ``` npm -g install bower ``` 全局安装后,如果node不是通过yum等装在系统默认路径,还需要做软链,使其变成全局可以找到。当然,将node的bin目录配置到$PATH变量是最省事的。 ``` echo "PATH=\$PATH:/usr/local/node/bin" >> /etc/profile source /etc/profile ``` ## 3、node-sass的全局安装 node-sass的全局安装做为单独的一节,是因为它的全局安装比较难以对付,很多人几经周折都没有搞定,包括我。 ``` npm -g install node-sass ``` 上面是正常的安装命令,但是往往会遇到下面的错误: ``` gyp WARN EACCES user "root" does not have permission to access the dev dir "/opt/node/lib/node_modules/node-sass/.node-gyp/8.9.1" gyp WARN EACCES attempting to reinstall using temporary dev dir "/opt/node/lib/node_modules/node-sass/.node-gyp" gyp verb tmpdir == cwd automatically will remove dev files after to save disk space gyp verb command install [ '8.9.1' ] gyp verb install input version string "8.9.1" gyp verb install installing version: 8.9.1 gyp verb install --ensure was passed, so won't reinstall if already installed gyp verb install version not already installed, continuing with install 8.9.1 ``` 命名是用root安装的,但是为什么提示没有这个目录的权限呢? 来看一下官方对于unsafe-perm参数的介绍:https://docs.npmjs.com/misc/config ``` unsafe-perm Default: false if running as root, true otherwise Type: Boolean Set to true to suppress the UID/GID switching when running package scripts. If set explicitly to false, then installing as a non-root user will fail. ``` 这个参数,如果是root,则为false,为其他用户,则为true。 root用户,这个参数默认为false,就导致了上面的错误;而非root用户全局安装时,因为node的目录在root用户的目录,也没有权限。这就形成了一个两难的尴尬局面。 索性,我们用root安装的时候,强制这个参数为true好了。 ``` npm -g install node-sass --unsafe-perm ``` 标签: npm, nodejs, yarn