V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ChrisFreeMan
V2EX  ›  程序员

最近换代理软件后没法玩 Node 了,各位大佬是怎么解决 npm 挂代理的问题的

  •  
  •   ChrisFreeMan · 2022-11-25 12:54:32 +08:00 · 4923 次点击
    这是一个创建于 489 天前的主题,其中的信息可能已经有所发展或是发生改变。

    目前遇到的问题是在设置代理的情况下,npm install 命令一直失败,原因找了下貌似是 https 连接的问题, 我是通过.zshrc 文件来指向本地的代理地址,通过这个地址指向我的 ss 代理。

    以下是设置其一

    export http_proxy="http://127.0.0.1:1087"
    export https_proxy="http://127.0.0.1:1087"
    

    第二种设置是指向 socks5 本地地址,然后都失败了。

    curl 和 brew 命令都正常。

    目前唯一有用的方法是将 npm 的仓库地址指向为 http 地址

    npm config set registry http://registry.npmjs.org
    

    虽然可以用,但是每次安装包都会发出警告⚠️,这就很烦了,大佬们是怎么搞定的。

    npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
    npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/
    
    61 条回复    2023-09-01 11:22:07 +08:00
    coffeedeveloper
        1
    coffeedeveloper  
       2022-11-25 14:04:30 +08:00
    你可以直接用 CNPM ,或者用阿里的国内镜像 ( https://npmmirror.com/)[https://npmmirror.com/]
    beisilu
        2
    beisilu  
       2022-11-25 14:09:13 +08:00
    warning 而已,能用就行
    ChrisFreeMan
        3
    ChrisFreeMan  
    OP
       2022-11-25 14:09:53 +08:00
    @coffeedeveloper 多谢回复,这个将作为我的替代方案。
    ChrisFreeMan
        4
    ChrisFreeMan  
    OP
       2022-11-25 14:10:23 +08:00
    @beisilu 😂warning 好难受。
    Musong
        5
    Musong  
       2022-11-25 14:11:25 +08:00
    ```
    npm config set strict-ssl false
    ```

    这个呢?能好使不?
    ChrisFreeMan
        6
    ChrisFreeMan  
    OP
       2022-11-25 14:13:49 +08:00
    @Musong 单独用它还不行,这个就是和上面那个指向 http 仓库的设置一起用的。
    shintendo
        7
    shintendo  
       2022-11-25 14:13:56 +08:00   ❤️ 1
    用户目录 /.npmrc 文件,写上淘宝镜像和常见二进制包镜像,解决 99%场景,参考 https://gist.github.com/niaodan2b/258909bf2e6249ada57d51b58184f067

    不建议用 cnpm ,cnpm 和 npm 的行为不一样的
    ChrisFreeMan
        8
    ChrisFreeMan  
    OP
       2022-11-25 14:15:44 +08:00
    @shintendo 多谢,又多了好多配置啊😂,太难了。就没有更方便的办法了吗。
    FightPig
        9
    FightPig  
       2022-11-25 14:19:19 +08:00
    @coffeedeveloper 不知道啥情况,有的 npm 包更新好久了,淘宝的镜像却找不到版本,
    shintendo
        10
    shintendo  
       2022-11-25 14:19:52 +08:00
    @ChrisFreeMan ?不需要其它配置呀,就这个文件内容改成我这样就行了。不用手动设置镜像,也不用设置代理。
    pathletboy
        11
    pathletboy  
       2022-11-25 14:20:46 +08:00
    要不试试 proxychains4 ?
    ChrisFreeMan
        12
    ChrisFreeMan  
    OP
       2022-11-25 14:22:06 +08:00
    @shintendo 好,我先收藏了,可以拿来应急也挺好的
    ChrisFreeMan
        13
    ChrisFreeMan  
    OP
       2022-11-25 14:33:50 +08:00
    @pathletboy 这种外挂软件的方式想过了,主要不太想用,主要是我觉得很奇怪,因为 pip 、git 、cur 、brew 之类的都没有这样的问题,所以想问下大家有没有办法,我也不太喜欢太多配置。
    kongkx
        14
    kongkx  
       2022-11-25 15:04:06 +08:00 via iPhone
    设置 .npmrc

    proxy=http://127.0.0.1:1087
    ChrisFreeMan
        15
    ChrisFreeMan  
    OP
       2022-11-25 15:05:47 +08:00
    @kongkx 这个和在 zshrc 终端环境配置里的代理设置是一样的,我都试过了。
    imMetaverse
        16
    imMetaverse  
       2022-11-25 15:14:42 +08:00
    一般在终端上
    export http_proxy=http://127.0.0.1:1087
    export https_proxy=http://127.0.0.1:1087
    设置后 就行 关闭后失效
    eason1874
        17
    eason1874  
       2022-11-25 15:16:05 +08:00
    我是修改 npm 设置,像这样

    npm config set proxy=http://127.0.0.1:1087
    ChrisFreeMan
        18
    ChrisFreeMan  
    OP
       2022-11-25 15:24:46 +08:00
    @eason1874
    @imMetaverse
    export http_proxy=http://127.0.0.1:1087 写入到终端环境和 npm config set proxy=http://127.0.0.1:1087 都是一样的,没有区别,一个是全局终端环境,一个是针对 npm 的。
    gqbre
        19
    gqbre  
       2022-11-25 15:27:49 +08:00
    不用对 npm 设代理,直接全局 .npmrc 设置为淘宝源就好了。有切换需求可以上 nrm
    kongkx
        20
    kongkx  
       2022-11-25 15:32:37 +08:00 via iPhone
    @ChrisFreeMan 最好 verbose 看看是哪里的问题
    imMetaverse
        21
    imMetaverse  
       2022-11-25 15:34:35 +08:00
    @ChrisFreeMan 我一般这样就可以的 我一般不用全局
    Kenmin
        22
    Kenmin  
       2022-11-25 15:34:42 +08:00   ❤️ 1
    nrm 解君愁
    skybig
        23
    skybig  
       2022-11-25 15:35:51 +08:00
    如果是自己电脑,可以用 clash 。tun 模式下本机流量都走代理,不用改源,更新很方便。
    wangsd
        24
    wangsd  
       2022-11-25 15:50:41 +08:00   ❤️ 1
    可以换成腾讯的源 npm config set registry http://mirrors.cloud.tencent.com/npm/
    nieyujiang
        25
    nieyujiang  
       2022-11-25 16:07:01 +08:00
    clashx pro 的增强模式.然后把终端的 export 设置代理干掉.
    shakukansp
        26
    shakukansp  
       2022-11-25 16:10:01 +08:00
    npm 不支持 socks5
    cnhongwei
        27
    cnhongwei  
       2022-11-25 16:13:50 +08:00
    如果你的 1087 是 socks5 代理的话,按资料说的 npm 不支持 socks5 代理,你应使用 http 及 https 代理。你看一下你的软件,大部分软件都支持 socks5 和 http(s)代理,只是端口不一致而已,如果软件不支持 https 代理,那就使用一个把 socks5 转 https 代理的软件。
    Huelse
        28
    Huelse  
       2022-11-25 16:17:18 +08:00
    echo "registry=https://registry.npmmirror.com/" >> ~/.npmrc

    这个域名一般都在白名单( DIRECT )里
    yohole
        29
    yohole  
       2022-11-25 16:30:10 +08:00
    这个问题劝退了无数新手,包括我因为这个推迟了很久才接触了 node ,很伤感
    sukidesuka
        30
    sukidesuka  
       2022-11-25 16:40:14 +08:00
    一般 200 块钱买个软路由,然后上面跑个 shellclash
    lovepplforever
        31
    lovepplforever  
       2022-11-25 16:43:03 +08:00
    nodejs 的 http 没有实现环境变量 http_proxy 代理的功能
    antonius
        32
    antonius  
       2022-11-25 16:48:56 +08:00
    很久没写 js 了。以前安装 nrm 然后设置 repo ,选择国内的即可。要么设置 proxy 。
    ChrisFreeMan
        33
    ChrisFreeMan  
    OP
       2022-11-25 16:49:52 +08:00
    我刚刚试了下 deno 创建 reac 的项目的速度,brew install deno 然后走流程 https://deno.land/x/[email protected]
    整个过程 1 分钟不到,我哭了😭,这才是我想要的啊。node 折腾几天了,要是 deno 生态能起来就好了
    ragnaroks
        34
    ragnaroks  
       2022-11-25 17:09:47 +08:00
    每个项目根目录中放置 ".npmrc" 文件,内容样例

    save-exact = true
    registry = "https://registry.npmmirror.com"


    你的报错是因为你使用了普通 HTTP 请求,它让你用 HTTPS 。
    ysc3839
        35
    ysc3839  
       2022-11-25 17:12:47 +08:00
    我最近遇到不支持 SOCKS 代理的程序,又不方便弄路由器全局代理,最后选择的方案是 sniproxy+socks ,可以看看这个项目 https://github.com/NiceLabs/go-sniproxy
    hevi
        36
    hevi  
       2022-11-25 17:13:40 +08:00
    直接本机代理配好一把梭?

    npm config set proxy="http://ip:port"
    star7th
        37
    star7th  
       2022-11-25 17:16:48 +08:00   ❤️ 1
    直接在命令行运行 npm config set registry https://registry.npmmirror.com


    不要再折腾!
    不要再折腾!
    别听其他乱七八糟的建议。
    鉴于你能提出这个问题,估计是个新手。对新手来讲,直接执行我上面说的命令就是最省事的方式。也不用去追究什么原理。
    star7th
        38
    star7th  
       2022-11-25 17:17:46 +08:00
    这个命令放在笔记里记着。每到一个环境,无论是本机还是服务器,都用得上。
    star7th
        39
    star7th  
       2022-11-25 17:19:08 +08:00
    多年 nodejs 开发人员路过。别折腾什么走代理的方式。设置 llinux 代理可能会影响到其他程序访问网络。
    IvanLi127
        40
    IvanLi127  
       2022-11-25 17:32:29 +08:00
    有条件的话在你的设备和上级网络中间加一个网关做代理,没条件的在设备上跑一个支持全局代理的软件。一个个软件配代理烦死人
    lisxour
        41
    lisxour  
       2022-11-25 17:39:06 +08:00
    @FightPig 国内镜像多多少少(不管是 npm 还是啥镜像还是谁家的)都有这样的毛病,都声称的秒级、分钟级同步,但实际却依然很容易碰到缺库、版本低问题。我用过的 npm 、packgist 、golang 、ubuntu 等都实实在在碰到过。
    lisxour
        42
    lisxour  
       2022-11-25 17:41:46 +08:00
    @star7th 不是可能,是 100%会,HTTP_PROXY 、HTTPS_PROXY 环境变量是系统级的。
    hsfzxjy
        43
    hsfzxjy  
       2022-11-25 17:44:16 +08:00 via Android
    我都是直接 proxychains4 ,从没遇到问题
    wu67
        44
    wu67  
       2022-11-25 17:47:53 +08:00
    https://registry.npmmirror.com/ 用这个. 反正我这用得好好的, 联通 4/5G 和电信宽带都正常用
    Snowei
        45
    Snowei  
       2022-11-25 17:50:39 +08:00
    1 、pac.js 填入 npm 的地址
    2 、开全局模式
    bakaft
        46
    bakaft  
       2022-11-25 18:24:53 +08:00   ❤️ 1
    如果是 Windows 平台,可以用 Clash 的 TUN 模式把所有流量转发到一个虚拟网卡,很方便。这样还可以顺带解决 WSL2 和 WSL2 内容器的代理问题,一步到位。
    superrichman
        47
    superrichman  
       2022-11-25 18:33:37 +08:00 via Android
    proxychains 包治百病
    lisongeee
        48
    lisongeee  
       2022-11-25 18:38:17 +08:00
    https://registry.npmmirror.com 在 pnpm 生成的 lock 文件在 https://registry.npmjs.org/ 再次安装会出现某些包链接 404 的情况,最好不要混用镜像

    问题复现示例 [jobs/5774239890]( https://github.com/lisonge/vite-plugin-monkey/actions/runs/3459144614/jobs/5774239890)
    kwh
        49
    kwh  
       2022-11-25 20:37:29 +08:00
    export http_proxy="http://127.0.0.1:1087" 只配置这个地址不配置 https 试一试?
    hamsterbase
        50
    hamsterbase  
       2022-11-25 21:39:44 +08:00
    npm i -g nrm

    nrm use taobao
    nrm use tencent
    HugoChao
        51
    HugoChao  
       2022-11-25 21:59:44 +08:00
    国内的话换淘宝镜像基本都可以解决
    顽固的项目我推荐手机热点,真的飞快
    zsj1029
        52
    zsj1029  
       2022-11-25 23:07:32 +08:00 via iPhone
    当然是 pnpm
    butanediol2d
        53
    butanediol2d  
       2022-11-25 23:37:21 +08:00
    没有一项规定要求软件从环境变量获取代理设置一定用的是 http_proxy 和 https_proxy 。

    有的软件认大写,有的认小写,有的都认,有的都不认。具体软件具体分析。
    systemcall
        54
    systemcall  
       2022-11-26 00:57:40 +08:00 via Android
    你要是在家的话,直接弄个软路由不就行了?路由器上面跑代理,电脑上什么代理软件都不需要
    humbass
        55
    humbass  
       2022-11-26 01:00:31 +08:00
    完美的解决方法是: 挂一个路由器,路由执行科学上网,国外 IP 一律代理,本机不需要做任何设置;
    bthulu
        56
    bthulu  
       2022-11-26 08:57:45 +08:00
    还是挂代理, 国内镜像多多少少都有缺库, 版本对不上的问题
    sunmker
        57
    sunmker  
       2022-11-26 10:07:29 +08:00
    路由器上代理,很方便的
    zxCoder
        58
    zxCoder  
       2022-11-26 11:17:01 +08:00
    tun 模式
    n18255447846
        59
    n18255447846  
       2022-11-26 11:53:33 +08:00
    npm config set proxy
    mmdsun
        60
    mmdsun  
       2022-11-26 18:18:37 +08:00
    tun 模式 或者 (推荐)路由器上直接安装代理软件,这样连接的所有设备都可以代理
    ChrisFreeMan
        61
    ChrisFreeMan  
    OP
       209 天前
    @zxCoder
    @mmdsun

    感谢两位的提示,为了后来 来的朋友,我最终解决的方法就是用他们两个说的 tun 模式。已经完美解决了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3277 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:29 · PVG 19:29 · LAX 04:29 · JFK 07:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.