起因
將本地運行完好的項目推送到服務器端進行自動打包部署,運行 “npm install“ 進行包安裝,提示一大堆 “gyp ..." 的報錯,記得之前 Windows 上報此錯誤是需要安裝 c++ 相關的運行套件,而在 CentOS7 上則需要安裝 gcc (一個驅動程序,根據代碼的后綴名來判斷調用c編譯器還是c++編譯器 (g++)),正常情況下 CentOS7 是自帶 gcc 的,之所以運行報錯,是因為 gcc 版本太低了,或者說我們的項目相關依賴需要的 gcc 版本太高了。
解決方法一
降低 node 版本,“npm install” 進行依賴安裝時,node 會進行代相關碼編譯,其中過高的 node 版本對 gcc 的版本要求就更高,所以可以試下降低 node 的版本,實測中 node 版本從 15.x 降到 14.x 解決問題。
解決方法二
更新 gcc 的版本,依次執行如下命令:
// 安裝centos-release-scl
sudo yum install centos-release-scl
// 安裝devtoolset,8.x 版本
sudo yum install devtoolset-8-gcc*
// 激活對應的 devtoolset
scl enable devtoolset-8 bash
// 查看當前 gcc 版本
gcc -v
至此,重新執行 “npm install” ,應該可以正常安裝了。
需要注意的是上面的操作只限當前會話,如若需要重啟后繼續使用,則需要執行以下配置:
// 啟用指定版本 devtoolset
source /opt/rh/devtoolset-8/enable
// 打開開機自啟執行文件,將上一個命令添加到 rc.local 末尾
vi /etc/rc.d/rc.local
// 如果遇到權限問題,可執行以下進行賦權后再操作
chmod +x /etc/rc.d/rc.local
如果不想每次都 enable 來指定版本的話,可以嘗試替換掉舊版本 gcc,具體如下:
mv /usr/bin/gcc /usr/bin/gcc-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/gcc /usr/bin/gcc
mv /usr/bin/g++ /usr/bin/g++-4.8.5
ln -s /opt/rh/devtoolset-8/root/bin/g++ /usr/bin/g++
gcc --version
g++ --version
