吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 845|回复: 0
收起左侧

[其他原创] 搭建自用的npm、yarn的registry镜像

[复制链接]
iLy_y 发表于 2024-6-10 15:09

前提是你有自己域名并托管在cf
源码地址:cloudflare-npm-proxy

const CUSTOM_DOMAINS = {
    'npm.example.com': 'https://registry.npmjs.org',
    'yarn.example.com': 'https://registry.yarnpkg.com',
    // 你可以添加更多的镜像地址
};

const DEFAULT_UPSTREAM = CUSTOM_DOMAINS['npm.example.com'];

const json = (data = {}, code = 200, headers = {}) => {
    return new Response(JSON.stringify(data), {
        status: code,
        headers: {
            'Content-Type': 'application/json',
            'Access-Control-Allow-Origin': '*',
            'X-Powered-By': 'X-Powered-By cloudflare npm proxy',
            ...headers,
        },
    });
};

// 路由函数,根据请求的主机名选择相应的上游地址
function routeByHosts(host) {
    return CUSTOM_DOMAINS[host] || DEFAULT_UPSTREAM;
}

export default {
    async fetch(request, env, ctx) {
        const url = new URL(request.url);
        const upstream = routeByHosts(url.hostname);

        if (request.method !== 'GET') {
            return Response.redirect(`${upstream}${url.pathname}`, 302);
        }

        if (url.pathname === '/') {
            return new Response(`Hello ${url.hostname}`);
        }

        const fetchUrl = `${upstream}${url.pathname}`;
        const response = await fetch(fetchUrl);

        if (url.pathname.endsWith('.tgz')) {
            const contentType = response.headers.get('content-type');
            if (contentType && contentType.indexOf('application/json') !== -1) {
                const errorData = await response.json();
                return json({ error: `Fetch failed: ${errorData.message}` }, 500);
            } else {
                return response;
            }
        }

        const data = await response.json();

        if (data.error) {
            return json(data, 500);
        }

        if (data && data.dist && data.dist.tarball) {
            data.dist.tarball = data.dist.tarball.replace(upstream, url.hostname);
        }

        return json(data);
    },
};

直接复制代码发布到cf的Workers配置自定义域即可。

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
bdcpc + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-12 06:36

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表