ノード切り替えソース ガジェットを開発する手順を説明します。

青灯夜游
リリース: 2023-01-31 20:34:18
転載
2730 人が閲覧しました

ノードでソースを切り替えるにはどうすればよいですか?ノード切り替え元ガジェットの作成方法は以下の記事で紹介していますので、ご参考になれば幸いです。

ノード切り替えソース ガジェットを開発する手順を説明します。

おいおい、またホイールを書く時間です。なぜこれを書きたいのですか?

npm 自身のソースのダウンロードは非常に遅いはずです

すでにツールがあります nrm tabao ソース、Tencent ソースなどのソースを切り替えるためにも使用されます, ダウンロード パッケージに依存すると高速化できます。nrm を使用すると、いつでも管理したり切り替えることができるソースが非常に多くなります。

1人目の友人のインストールnrm非常に面倒なのでソースコードを使ってインストールする必要があります

ノード切り替えソース ガジェットを開発する手順を説明します。

2人目の友人の会社にはプライベートがたくさんあります。私たちは手動で切り替えるのが面倒なので、npm ソースを簡単に切り替えるための小さなツールを自分たちで作成したいと考えています [関連チュートリアルの推奨事項:

nodejs ビデオ チュートリアル

]ノード切り替えソース ガジェットを開発する手順を説明します。

アイデア 1、コマンドを呼び出してソースを設定する

npm config set registry  源地址
ログイン後にコピー
アイデア 2 view コマンドを使用してソース アドレスを取得する
npm config get registry
ログイン後にコピー

主に次の 2 つの手順

コード実装

commander

commandernodejs です

解析できるモジュール 入力したコマンドは vue vite などの各種スキャフォールディングでよく使われます。

xxx -VView version xxx use

スクリプトを実行します

xxx -hcommander を使用してヘルプなどを表示できます##inquirer

ノード切り替えソース ガジェットを開発する手順を説明します。##inquirer

これは、nodejs のモジュールでもあり、vue の cli、vite などのコマンド操作、反応スキャフォールディングなどによく使用されます。

##たとえば、このオプションには入力ボックス、複数選択などもあります。 #registries.json

このファイルに初期ソースをいくつか入れます。nrm の github から盗んだ ping自分で追加したものです

{
    "npm": {
        "home": "https://www.npmjs.org",
        "registry": "https://registry.npmjs.org/",
        "ping": "https://registry.npmjs.org"
    },
    "yarn": {
        "home": "https://yarnpkg.com",
        "registry": "https://registry.yarnpkg.com/",
        "ping": "https://registry.yarnpkg.com"
    },
    "tencent": {
        "home": "https://mirrors.cloud.tencent.com/npm/",
        "registry": "https://mirrors.cloud.tencent.com/npm/",
        "ping": "https://mirrors.cloud.tencent.com/npm"
    },
    "cnpm": {
        "home": "https://cnpmjs.org",
        "registry": "https://r.cnpmjs.org/",
        "ping": "https://r.cnpmjs.org"
    },
    "taobao": {
        "home": "https://npmmirror.com",
        "registry": "https://registry.npmmirror.com/",
        "ping": "https://registry.npmmirror.com"
    },
    "npmMirror": {
        "home": "https://skimdb.npmjs.com/",
        "registry": "https://skimdb.npmjs.com/registry/",
        "ping": "https://skimdb.npmjs.com/registry"
    }
}
ログイン後にコピー
#!/usr/bin/env node

const { program } = require('commander')
const PKG = require('../package.json') //引入package json
const registries = require('../registries.json'); //引入初始源
const inquirer = require('inquirer');
const { exec, execSync } = require('child_process') //子线程用于执行shell命令
const ping = require('node-http-ping') //ping网址的一个库
const fs = require('fs')
const chalk = require("chalk"); //console 变颜色的一个库
const path = require('path')
program.version(PKG.version) //设置版本默认命令 -V --version

//读取源地址方便设置*
const getOrigin = async () => {
    return await execSync('npm get registry', { encoding: "utf-8" })
}

//列出所有的源,如果当前有在使用前面加上*
program.command('ls').description('查看镜像').action(async () => {

    const res = await getOrigin()

    const keys = Object.keys(registries)

    const message = []

    //填充横线算法npm------  yarn------
    const max = Math.max(...keys.map(v => v.length)) + 3
    keys.forEach(k => {

        const newK = registries[k].registry == res.trim() ? ('* ' + k) : ('  ' + k)
        const Arr = new Array(...newK)
        Arr.length = max;
        const prefix = Array.from(Arr).map(v => v ? v : '-').join('')

        message.push(prefix + '  ' + registries[k].registry)
    })
    console.log(message.join('\n'))
})

//切换源
program.command('use').description('请选择镜像').action(() => {
    inquirer.prompt([
        {
            type: "list",
            name: "sel",
            message: "请选择镜像",
            choices: Object.keys(registries)
        }
    ]).then(result => {

        const reg = registries[result.sel].registry

        exec(`npm config set registry ${reg}`, null, (err, stdout, stderr) => {

            if (err) {
                console.error('切换错误', err)
            } else {
                console.log('切换成功')
            }
        })
    })
})



//获取当前源
program.command('current').description('查看当前源').action(async () => {
    const reg = await getOrigin()
    const v = Object.keys(registries).find(k => {
        if (registries[k].registry === reg.trim()) {
            return k;
        }
    })
    console.log(chalk.blue('当前源:', v))
})

//ping 源
program.command('ping').description('测试镜像地址速度').action(() => {
    inquirer.prompt([
        {
            type: "list",
            name: "sel",
            message: "请选择镜像",
            choices: Object.keys(registries)
        }
    ]).then(result => {

        const url = registries[result.sel].ping.trim()

        ping(url).then(time => console.log(chalk.blue(`响应时长: ${time}ms`)))
            .catch(() => console.log(chalk.red('GG')))

    })
})

//添加源 读写registries.json 文件实现
program.command('add').description('自定义镜像').action(() => {
    inquirer.prompt([
        {
            type: "input",
            name: "name",
            message: "请输入镜像名称",
            validate(answer) {
                const keys = Object.keys(registries)
                if (keys.includes(answer)) {
                    return `不能起名${answer}跟保留字冲突`
                }
                if (!answer) {
                    return '名称不能为空'
                }
                return true
            }
        },
        {
            type: "input",
            name: "url",
            message: "请输入镜像地址",
            validate(answer) {
                if (!answer) {
                    return `url不能为空`
                }
                return true
            }       
        }
    ]).then(result => {

        const del = (url) => {
            const arr = url.split('')
            //本来想用at 16 以下不支持
            return arr[arr.length - 1] == '/' ? (arr.pop() && arr.join('')) : arr.join('')
        }

        registries[result.name] = {
            home: result.url.trim(),
            registry: result.url.trim(),
            ping: del(result.url.trim()), //去掉末尾/ 不然无法ping
        }
        fs.writeFileSync(path.join(__dirname, '../registries.json'), JSON.stringify(registries, null, 4))
        console.log(chalk.blue('添加完成'))
    })
})



program.parse(process.argv)
ログイン後にコピー

使用方法

ノード切り替えソース ガジェットを開発する手順を説明します。

npm i xmzs -g
ログイン後にコピー

インストール後、

mmp

コマンドが表示されます。なぜですか名前は呼ばれません

xmzs

聞かないでください。

mmp

mmp ls
ログイン後にコピー
すべてのソースをリストします

mmp use
ログイン後にコピー
ソースの切り替え nrm が入力されています。便宜上、ここに選択ボックスがあります <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">mmp current</pre><div class="contentsignin">ログイン後にコピー</div></div>現在のソースを表示

mmp ping
ログイン後にコピー
ノード切り替えソース ガジェットを開発する手順を説明します。速度test

ノード切り替えソース ガジェットを開発する手順を説明します。

map add
ログイン後にコピー

カスタム ソース

ノード切り替えソース ガジェットを開発する手順を説明します。

mmp ls View

ノード切り替えソース ガジェットを開発する手順を説明します。

##ノード関連の知識の詳細については、ノード切り替えソース ガジェットを開発する手順を説明します。nodejs チュートリアル

を参照してください。

以上がノード切り替えソース ガジェットを開発する手順を説明します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:juejin.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート