Ubuntu 16.04离线安装node-sass-chokidar遇node-gyp问题求助
我之前在离线服务器上折腾过node-gyp和node-sass的安装,特别能理解你这种明明下了依赖文件却跑不通的烦躁!针对Ubuntu 16.04的离线场景,给你梳理几个精准的步骤试试:
先核对版本匹配性
这是最容易踩坑的点:你下载的node头文件必须和本地Node.js版本完全对应(比如Node v12.22.12对应node-v12.22.12-headers.tar.gz),而node-sass的二进制包也要同时匹配Node版本和系统架构(Ubuntu 16.04是x64,所以找linux-x64-xx_binding.node,xx对应Node的ABI版本,比如Node v12对应ABI 72)。版本不匹配的话,文件再全也没用。给node-gyp指定离线头文件路径
手动解压头文件后,通过环境变量或者命令参数告诉node-gyp去哪里找:
方式一:先设置环境变量export npm_config_nodedir=/path/to/your/extracted-headers-folder这里的路径要指向解压后的头文件根目录,里面能看到
include/node文件夹才算正确。
方式二:直接在yarn命令中指定yarn add node-sass-chokidar --nodedir=/path/to/your/extracted-headers-folder跳过node-gyp编译:给node-sass指定本地二进制包
如果能找到对应版本的node-sass二进制包,直接用它可以绕开node-gyp的编译环节,这会省心很多:- 把下载好的
linux-x64-xx_binding.node放到本地某个目录 - 设置环境变量指定二进制包路径:
export SASS_BINARY_PATH=/path/to/your/linux-x64-xx_binding.node- 再执行yarn安装命令,node-sass就会直接使用本地二进制包,不会触发node-gyp的远程请求或编译。
- 把下载好的
确保系统依赖已安装
Ubuntu 16.04下node-gyp编译需要基础构建工具,即使离线也要先确保这些包已经装好(如果之前没装的话):sudo apt-get install build-essential python2.7注意旧版本Node.js对应的node-gyp依赖Python 2.7,别搞错成Python3了。
分步安装排查问题
如果直接装node-sass-chokidar还是失败,可以先单独安装node-sass,确认它能离线安装成功后,再安装node-sass-chokidar:yarn add node-sass --nodedir=/path/to/headers --sass-binary-path=/path/to/binding.node这样能把层级依赖的问题拆开,更容易定位到底是node-sass还是上层依赖的问题。
内容的提问来源于stack exchange,提问作者Jjang

