自行构筑一个cli工具

在学习各种框架时,通常简单的直接通过cli工具方便快捷的创建项目,在简单项目中还合用,但是如果项目稍复杂,或者有用到一些基于私人定制的工具时就稍显不足,除了直接把纯净版架子丢git上,自己实现一个cli工具实际上也不是很复杂的。

首先列举一些经常会用到的模块
org 显示loading
在这里插入图片描述
文档 : ora – npm
示例 :

	const ora = require('ora');
	const loading = ora('building...').start();
	loading.color = 'yellow'
	setTimeout(() => {
	    loading.stop();
	}, 3000);

rimraf 递归清除文件
比如清除全部build后的dist文件,提供喜闻乐见的rm -rf能力
文档 : rimraf – npm
示例 :

	const rimraf = require('rimraf');
	rimraf('./dist/', function () {
	    //do sth
	});

path 简化路径操作
这个很常见想必不需要赘述了
文档 :path – node 上不去的可以访问 path - 菜鸟教程
示例 :

	const path = require('path');
	console.log(__dirname)
	console.log(__filename)
	console.log(path.dirname(dist/index.js))

chalk 美化字体颜色
没什么实际作用,就是炫,比如build时写个爆闪矩阵晃瞎眼
在这里插入图片描述
文档:chalk – npm
示例:

	const chalk = require('chalk');
	console.log(chalk.red.bgBlue('bgBlue'))
	console.log(chalk.rgb(255,0,255).bgRgb(0,0,66)('wtf'))

commander 命令包
提供增加自定义指令的能力
文档:commander – npm
示例:

	const commander = require('commander');
	commander.version('1.0', '-v --version');
	commander.command('init <name>').action((e) => { console.log(e) })
	commander.option('-a', 'des描述怎么拼来着')
	commander.parse(process.argv)

inquirer 询问者
在这里插入图片描述

就是init时会问你name啊auther啊要不要eslint啊干这个的
文档: inquirer – npm
示例:

const inquirer = require('inquirer')
inquirer.prompt([
    {
        type: 'input',
        name: 'name',
        message: 'project name'
    }
]).then(e=> {
    console.log(e)
}).catch(e=>{console.log(e)})

接下来入正活了,首先肯定是基于某套框架例如vue\react的脚手架创建一个初始项目,基于这个初始项目逐步的将我们自己需要的一些工具、组件添加完善;最后就可以结合上述的一些花活整出自己的cli工具了。

#!/usr/bin/env node
//声明编译环境,省去node关键字
// 本地方式 - 适合自己玩,新建bin/index.js而后npm link添加全局指令
const fs = require('fs');
const ora = require('ora');
const chalk = require('chalk');
function myCli(name){
    let demoPath = './project';
    let tagPath = './'+name;
    let loading = ora(chalk.yellow('downing...'))
    function down(arr){
        while (arr.length > 0){
            let item = arr.shift();
            if(item[0]=='file'){
                let data = fs.readFileSync(item[1]);
                fs.writeFileSync(tagPath + "/" + item[1].replace("./project", ".").data);
            }else{
                let path = tagPath+"/"+item[1].replace("./project",".")
                fs.mkdirSync(path);
            }
        }
        loading.stop();
        console.log(chalk.green('DownLoad Finish'))
    }
    // 获取目录结构下所有文件
    function makearr(){
        let arr= [];
        function read(path){
            let files = fs.readdirSync(path);
            files.forEach(function(item,index){
                let nowpath = path+"/"+item;
                let stat = fs.statSync(nowpath);
                if(stat.isDirectory()){
                    arr.push(['dir',nowpath]);
                    read(nowpath);
                }else{
                    arr.push(["file",nowpath]);
                }
            })
        }
        read(demoPath);
        return arr;
    }
}
// git方式
const download = require('download-git-repo')
download-git-repo(username/仓库名)
module.export = myCli;

如果想要直接npm i myCli -g这样直接通过npm安装还需要将包发布到npm上,发布也简单跟git差不多,npm login登录后想一个不会重复的名字直接npm publish就齐活了。

好的,以下是一个简单的 Dockerfile,可以用来构建运行 PHP 的环境: ```Dockerfile FROM php:7.4-apache # 安装 mysql 扩展 RUN docker-php-ext-install mysqli pdo_mysql # 将 PHP 应用程序复制到容器中 COPY src/ /var/www/html/ # 设置 Apache 配置文件 COPY apache-config.conf /etc/apache2/sites-available/000-default.conf # 启用 Apache 的 rewrite 模块 RUN a2enmod rewrite # 暴露 80 端口 EXPOSE 80 ``` 其中,`FROM php:7.4-apache` 表示基础镜像为官方提供的 PHP 7.4 和 Apache。 `RUN docker-php-ext-install mysqli pdo_mysql` 表示安装 MySQL 扩展,以便 PHP 可以连接 MySQL 数据库。 `COPY src/ /var/www/html/` 表示将 PHP 应用程序复制到容器的 `/var/www/html/` 目录下,这是 Apache 默认的网站根目录。 `COPY apache-config.conf /etc/apache2/sites-available/000-default.conf` 表示将 Apache 的配置文件复制到容器中。 `RUN a2enmod rewrite` 表示启用 Apache 的 rewrite 模块,以便支持 URL 重写等功能。 `EXPOSE 80` 表示暴露容器的 80 端口,以便可以访问 PHP 应用程序。 你可以将以上代码保存到一个名为 `Dockerfile` 的文件中,并将你的 PHP 应用程序放到一个名为 `src` 的目录中,然后在该目录下运行以下命令来构建 Docker 镜像: ``` docker build -t my-php-app . ``` 其中,`-t my-php-app` 表示将该镜像命名为 `my-php-app`。最后的 `.` 表示 Dockerfile 所在的当前目录。 构建完成后,你可以运行以下命令来启动容器: ``` docker run -d -p 80:80 my-php-app ``` 其中,`-d` 表示以守护进程模式启动容器,`-p 80:80` 表示将容器的 80 端口映射到主机的 80 端口,`my-php-app` 表示使用刚才构建的镜像启动容器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值