63 # commander 的配置

初始化配置文件

新建文件夹 63,执行 npm init -y

在这里插入图片描述

修改配置文件

{
    
    
    "name": "kaimo-http-server",
    "version": "1.0.0",
    "description": "",
    "main": "index.js",
    "keywords": [
        "http-server"
    ],
    "author": "kaimo",
    "license": "MIT",
    "bin": {
    
    
        "kaimo-http-server": "./bin/www.js"
    }
}

新建 bin 文件夹,下面添加 www.js

#! /usr/bin/env node

console.log("进入 bin");

使用下面命令添加全局命令

npm link

然后就可以执行我们的命令

kaimo-http-server

在这里插入图片描述

使用 commander

https://github.com/tj/commander.js/blob/HEAD/Readme_zh-CN.md

npm install [email protected]

在这里插入图片描述

自定义配置项:

const config = {
    
    
    // 配置端口号
    port: {
    
    
        option: "-p, --port <val>",
        description: "set your server port",
        usage: "kaimo-http-server --port 3000",
        default: 3000
    },
    // 配置目录
    directory: {
    
    
        option: "-d, --directory <val>",
        description: "set your start directory",
        usage: "kaimo-http-server --directory D:",
        default: process.cwd()
    },
    // 配置主机名
    host: {
    
    
        option: "-h, --host <val>",
        description: "set your hostname",
        usage: "kaimo-http-server --host 127.0.0.1",
        default: "localhost"
    }
};

module.exports = config;

www.js 添加 commander 相关代码

#! /usr/bin/env node

const program = require("commander");
const {
    
     version } = require("../package.json");
const config = require("./config.js");

program.name("kaimo-http-server");
program.usage("[args]");
program.version(version);

Object.values(config).forEach((val) => {
    
    
    if (val.option) {
    
    
        program.option(val.option, val.description);
    }
});

program.on("--help", () => {
    
    
    console.log("\r\nExamples:");
    Object.values(config).forEach((val) => {
    
    
        if (val.usage) {
    
    
            console.log("  " + val.usage);
        }
    });
});

// 解析用户的参数
let parseObj = program.parse(process.argv);
console.log("parseObj---->", parseObj);

let keys = Object.keys(config);
console.log(keys);

// 最终用户拿到的数据
let resultConfig = {
    
    };
keys.forEach((key) => {
    
    
    console.log(parseObj[key]);
    resultConfig[key] = parseObj[key] || config[key].default;
});

console.log(resultConfig);

可以执行命令

kaimo-http-server --help

在这里插入图片描述

可以执行命令

kaimo-http-server --version

在这里插入图片描述

可以执行命令

kaimo-http-server --host xxx --port 4000

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/kaimo313/article/details/132029202
63
今日推荐