npm install 使用了不同版本的node,jenkins打包vue项目,cnpm打包超时,node-sass安装失败

1、前提

(1)全局node版本为16,jenkins需要新增一个node14用于打包vue项目,不可影响历史安装的node16使用,
已建立node16软链接在/usr/local/bin目录下。
(2)服务器使用cnpm报错 [npminstall:get] retry GET … ConnectTimeoutError: Connect Timeout Error, status: -1, headers: {}

[npminstall:get] retry GET https://registry.npmmirror.com/rimraf after 200ms, 
retry left 3, ConnectTimeoutError: Connect Timeout Error, status: -1, headers: {}

(3)将node修改为node14之后,使用npm直接安装node-sass报错,npm install 添加 --sass_binary_site=https://registry.npmmirror.com/binary.html?path=node-sass/ 也不行

2、错误分析

(1)使用的node-sass版本太低,根据官方版本说明,最高支持node14,无法使用node16,虽然使用node14的npm打包,最后脚本并未使用npm所在的node14,而是使用了全局node 16的版本,可能是优先使用环境变量中的node进行操作的。
(2)cnpm连接超时,可能是服务器网速太慢,或者cnpm配置的超时时间太短,经过查资料改了好多时间的配置,但是都未解决,不确定在哪里修改超时时间,如果有大佬知道可以评论区交流一下。

3、解决方案

(1) 在/usr/local/bin 新建node14的软链接,文件名为node14,需要打包时,将node改名为node_jenkins_temp,node14改名为node,使全局node使用14的版本
(2) 服务器可以从cnpm的包下载地址下载,但是cnpm报错,操作之后发现最终可以下载,重试几次会有很大的几率下载成功,但是如果包很多总会出现重试几次都失败的情况,可仅使用cnpm安装npm报错的包。
(3) 由于node-sass使用npm直接安装报错,先使用cnpm安装node-sass,再使用npm install

4、操作步骤

(1)建立软链接

ln -s /home/nodejs/node14.19.3/bin/node /usr/local/bin/node14
# 此处已安装cnpm,如未安装可按照官网步骤安装
ls -s /home/nodejs/node14.19.3/bin/cnpm /usr/local/bin/cnpm14

# 根据需要链接npm14,如需要方便调用可以执行以下命令
ls -s /home/nodejs/node14.19.3/bin/npm /usr/local/bin/npm14

(2)打包脚本

workspace_path=/home/code/ui-simple # 代码目录
node_bin_path=/usr/local/bin        # node环境变量目录
echo workspace_path

# 执行前,将node和node14互换
cd $node_bin_path
mv node node_jenkins_temp
cp node14 node

# 跳转到代码目录进行打包
cd $workspace_path
cnpm14 install [email protected]
#cnpm14 install [email protected] # 此处可安装npm下载很慢的包

# --unsafe-perm=true --allow-root 两个参数可视情况去掉,此处因为我的用户权限太低加的
# 此处直接使用npm是因为jenkins环境变量配置了node14的目录,如果单纯执行脚本可以用 npm14
npm install --unsafe-perm=true --allow-root --registry=https://registry.npmmirror.com --sass_binary_site=https://registry.npmmirror.com/binary.html?path=node-sass/
npm run build

# 打包命令
cd dist
tar -zcvf ui-simple.tar.gz *

# 结束后,将node和node14还原至初始的名字
cd $node_bin_path
rm -rf node
mv node_jenkins_temp node

5、其他问题

node14 的npm 执行 ./npm config ls -l 查看全部配置,展示 node version = v16,node bin location 为node16的目录。
编辑node14/bin/npm文件,将第一行的 #!/usr/bin/env node 修改为 #!/usr/bin/env node14
此时配置已修改,但是操作并没有发现有什么用途,node-sass还是使用的全局的node16

你可能感兴趣的:(vue.js,npm,jenkins,node.js,sass)