• 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: {}
    
    • 1
    • 2

    (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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    (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 node-sass@4.13.1
    #cnpm14 install optipng-bin@7.0.1 # 此处可安装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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    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

  • 相关阅读:
    【实战案例】——实战渗透某不法网站
    蓝桥杯双周赛算法心得——摆玩具(分段的差不计入结果)
    第十六章 类和对象——运算符重载
    产品经理要不要考PMP?进化你能力的阶梯!(附:新版考纲及教材)
    Java版企业电子招标采购系统源码—企业战略布局下的采购寻源
    第2部分 路由器基本配置
    每日一题:什么是单点登录?如何实现?
    智慧城市大脑数据中台解决方案:PPT全套37页,附下载
    C语言程序设计-8 函 数
    【拆解Vue3】渲染器是如何实现的(下篇)?
  • 原文地址:https://blog.csdn.net/sinat_36633540/article/details/127672592