npmmirror 竟然有些包没有更新到最新版本 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uni
V2EX    Node.js

npmmirror 竟然有些包没有更新到最新版本

  •  
  •   uni 3 月 25 日 1078 次点击

    effect-solutions 这个包,现在最新的是 0.5.2 ,npmmirror 上面还是 0.4.13

    一个镜像站出这种错误实在是太恶心了,换腾讯的源了

    10 条回复    2026-03-30 15:52:12 +08:00
    LiCaoZ
        1
    LiCaoZ  
       3 月 25 日 via iPhone
    刚才尝试手动触发了一下同步,似乎是因为包文件太大了而且不在白名单内所以同步的时候丢弃了。

    [2026-03-25T13:04:15.120Z][UP] Sync effect-solutions fail [4031ms], log: https://r.cnpmjs.org/-/package/effect-solutions/syncs/69c3dd4a343f53406cb13835/log, offset: 408
    [2026-03-25T13:04:15.120Z][UP] upstream error: Synced version 0.5.0 fail, large package version size: 325793115, allow size: 83886080, see https://github.com/cnpm/unpkg-white-list, white list version: 1.273.0
    [2026-03-25T13:04:15.120Z][UP] Sync https://r.cnpmjs.org/effect-solutions give up
    chenluo0429
        2
    chenluo0429  
       3 月 25 日 via Android
    你知道 npmmirror 的恶心了吗?之前公司部署的 nexus ,源优先 npmmirror ,然后才是 npmjs 。
    stylus 撤包的时候,见鬼的 npmmirror 自己上传了一份被下撤的版本,他妈的 hash 还不一致。CI 构建全炸了,研究了半天才发现是 npmmirror 的问题。
    之后就只保留 npmjs 源了,告别阿里的草台班子
    wangtian2020
        3
    wangtian2020  
       3 月 26 日
    npm 又不是连不上,实在不懂要去镜像下载的人的心态
    遇上有包实在下不下来,就 tun 模式启动
    magicdawn
        4
    magicdawn  
       3 月 29 日
    确实烦,但是一个包 325MB 就不得不反思为什么 npm 包要这么大?
    npm 应该用来分发代码, assets 请自建分发,参考 puppeteer 下载浏览器实例.

    > 325793115 / 1000 / 1000
    325.793115
    magicdawn
        5
    magicdawn  
       3 月 29 日
    这是个公益站,恶心不用就是。没有收你一分钱哦~
    因为我觉得很好,必须站出来说句好
    因为 npmmirror 我的常用命令 `corepack use pnpm@latest && ncu-safe && pi && p dedupe && p prune` 快了不少

    export COREPACK_NPM_REGISTRY=https://registry.npmmirror.com


    ```sh
    where ncu-safe
    ncu-safe: aliased to ncu -t minor -u

    where pi
    pi: aliased to pnpm install

    where p
    p: aliased to pnpm
    ```
    magicdawn
        6
    magicdawn  
       3 月 29 日


    这个包水平低下,严重浪费开发者磁盘,建议停用
    https://www.npmjs.com/package/effect-solutions?activeTab=code
    magicdawn
        7
    magicdawn  
       3 月 29 日
    npmmirror v.s tencent mirror ,坐标湖北武汉, 结果:

    === Final Result (sorted by tarball avg) ===

    npmmirror
    metadata avg: 229.4 ms
    metadata p50: 253.9 ms
    metadata p90: 409.2 ms
    tarball avg: 435.1 ms
    tarball p50: 266.1 ms
    tarball p90: 906.1 ms


    tencent
    metadata avg: 777.0 ms
    metadata p50: 700.7 ms
    metadata p90: 1336.7 ms
    tarball avg: 508.6 ms
    tarball p50: 440.9 ms
    tarball p90: 938.3 ms

    脚本 via ChatGPT
    ```js
    #!/usr/bin/env node
    import { performance } from 'node:perf_hooks'

    const registries = [
    {
    name: 'npmmirror',
    base: 'https://registry.npmmirror.com',
    },
    {
    name: 'tencent',
    base: 'http://mirrors.tencent.com/npm',
    },
    ]

    // 多包(覆盖不同大小 & 热门程度)
    const PACKAGES = [
    { name: 'react', version: '18.2.0' },
    { name: 'lodash', version: '4.17.21' },
    { name: 'typescript', version: '5.4.5' },
    { name: 'axios', version: '1.6.7' },
    ]

    // 多轮(建议 ≥10 )
    const RUNS = 10

    // 并发数(模拟 npm )
    const COnCURRENCY= 4

    async function fetchWithTiming(url) {
    const start = performance.now()
    const res = await fetch(url)
    await res.arrayBuffer()
    return performance.now() - start
    }

    // 简单并发控制
    async function runPool(tasks, limit) {
    const results = []
    let i = 0

    async function worker() {
    while (i < tasks.length) {
    const idx = i++
    results[idx] = await tasks[idx]()
    }
    }

    await Promise.all(Array.from({ length: limit }, worker))
    return results
    }

    async function testRegistry(registry) {
    const metadataTimes = []
    const tarballTimes = []

    for (let run = 0; run < RUNS; run++) {
    const tasks = []

    for (const pkg of PACKAGES) {
    const metadataUrl = `${registry.base}/${pkg.name}`
    const tarballUrl = `${registry.base}/${pkg.name}/-/${pkg.name}-${pkg.version}.tgz`

    tasks.push(async () => {
    const t = await fetchWithTiming(metadataUrl)
    metadataTimes.push(t)
    })

    tasks.push(async () => {
    const t = await fetchWithTiming(tarballUrl)
    tarballTimes.push(t)
    })
    }

    await runPool(tasks, CONCURRENCY)
    console.log(`[${registry.name}] run ${run + 1}/${RUNS} done`)
    }

    function stats(arr) {
    const sorted = [...arr].sort((a, b) => a - b)
    const avg = arr.reduce((a, b) => a + b, 0) / arr.length
    const p50 = sorted[Math.floor(sorted.length * 0.5)]
    const p90 = sorted[Math.floor(sorted.length * 0.9)]
    return { avg, p50, p90 }
    }

    return {
    name: registry.name,
    metadata: stats(metadataTimes),
    tarball: stats(tarballTimes),
    }
    }

    async function main() {
    const results = []

    for (const r of registries) {
    console.log(`\nTesting ${r.name}...`)
    const res = await testRegistry(r)
    results.push(res)
    }

    console.log('\n=== Final Result (sorted by tarball avg) ===')

    results.sort((a, b) => a.tarball.avg - b.tarball.avg)

    for (const r of results) {
    console.log(`
    ${r.name}
    metadata avg: ${r.metadata.avg.toFixed(1)} ms
    metadata p50: ${r.metadata.p50.toFixed(1)} ms
    metadata p90: ${r.metadata.p90.toFixed(1)} ms
    tarball avg: ${r.tarball.avg.toFixed(1)} ms
    tarball p50: ${r.tarball.p50.toFixed(1)} ms
    tarball p90: ${r.tarball.p90.toFixed(1)} ms
    `)
    }
    }

    main()
    ```
    uni
        8
    uni  
    OP
       3 月 30 日
    @wangtian2020 你不知道别人的使用状况就别信口开河,开 tun 的话整台机器都会受影响,不是所有人都能开 tun 的
    uni
        9
    uni  
    OP
       3 月 30 日
    @magicdawn #5 npm 站镜像不应该保持跟 npm 一模一样?自以为是自作主张不该被喷?它可以决定这个包质量低下,下次是不是可以决定 react 质量低下让你强制用 vue ?

    一个 npm 镜像站,保持跟 npm 一模一样就是对于他最基本的要求,连这种基本要求都做不到,它才是质量低下,活该被喷
    magicdawn
        10
    magicdawn  
       3 月 30 日
    @uni #9 为什么不去了解一下背景呢?大 npm 包被影视站利用,成本你出么?

    如果你嫌弃就不要用,没有收费为何要承担被你喷的困境。

    是的你没有了解背景的义务,但同时你也没有喷的权利。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3206 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 12:57 PVG 20:57 LAX 05:57 JFK 08:57
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86