V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
uni
V2EX  ›  Node.js

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

  •  
  •   uni · 3 月 25 日 · 1254 次点击

    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   ·   1190 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 17:53 · PVG 01:53 · LAX 10:53 · JFK 13:53
    ♥ Do have faith in what you're doing.