Skip to content

weiyunbyte/byte

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

13 Commits
 
 
 
 
 
 

Repository files navigation

###vue移动端UI框架

  • Vant UI 有赞开发的轻量、可靠的小程序 UI 组件库
  • Nut UI 京东开发的一套移动端轻量级组件库
  • Cube UI 滴滴开发的Vue提供的出色的移动ui lib工具
  • Mint UI 饿了么开源的移动端UI组件库(很久没更新了) ###letsencrypt利用acme.sh生成通配符的https证书
  • 安装:
curl  https://get.acme.sh | sh
  • 并创建 一个 bash 的 alias, 方便你的使用:
alias acme.sh=~/.acme.sh/acme.sh
  • 生成证书:(阿里云服务器)
acme.sh  --issue -d yoururl.com  -d '*.yoururl.com'  --dns dns_ali
  • copy/安装 证书:
acme.sh --install-cert -d yoururl.com -d *.yoururl.com \
--key-file       /path/to/keyfile/in/nginx/key.pem  \
--fullchain-file /path/to/fullchain/nginx/cert.pem \
--reloadcmd     "service nginx force-reload"
  • 自动升级acme.sh:
acme.sh  --upgrade  --auto-upgrade
  • 修改nginx 443配置 ###自己的脚手架工具
  • 创建脚手架项目文件ceshi-cli,再创建一个index.js文件
#!/usr/bin/env node
function start() {
	console.log('hello world')
}
start()
  • 通过命令 npm init -y初始化package.json文件,配置bin选项
    -y 表示接受npm的一些默认参数
"bin": {
    "ceshi": "index.js"
  }
  • 使用commander.js解析命令行参数 安装:
npm install commander

再index.js中引入

const {program} = require('commander')

调用program的一些api
版本号:

program.version(require('./package.json').version) // 输出版对应的版本号
program
    .command('create <projectName>')
    .description('用于创建一个项目模板')
    .option("-T, --template [template]", "输入使用的模板名字")
    .action(function(projectName, options){
        let template = options.template || "vue-default-template";
        projectName = projectName || 'untitled';
        console.log(`成功创建项目:${projectName}`)
        console.log(`所使用的模板:${template}`);
    });
// 打印所以模板
program
    .command('checkAll')
    .description('查看所有的模板')
    .action(function(){
        const templateList = [
            'vue-default-template',
            'vue-default-template-ts'
        ]
        templateList.forEach((temp,index) => {
            console.log(`(${index+1})  ${temp}`)
        })
    })
program.parse(process.argv);

命令行中输入:

ceshi create demoProject -T vue-default-template
ceshi checkAll
  • 使用inquirer.js设计命令行交互
    安装:
npm install inquirer

我们创建一个inquirer.js文件,来写交互的逻辑
index.js文件

program
    .command('create <projectName>')
    .description('用于创建一个项目模板')
    .option("-T, --template [template]", "输入使用的模板名字")
    .action(async function(projectName, options){
        let template = options.template;
        projectName = projectName || 'untitled';

        if(!template){
            template = await chooseTemplate() // 注意这里是一个异步方法
        }


        console.log(`成功创建项目:${projectName}`)
        console.log(`所使用的模板:${template}`);
    });

inquirer.js文件

const inquirer = require('inquirer')

async function chooseTemplate(){
    const promptList = [
        {
            type: "list", // type决定交互的方式,比如当值为input的时候就是输入的形式,list就是单选,checkbox是多选...
            name: "template",
            message: "选择一个需要创建的工程化模板",
            choices: [
                {
                    name: "vue-default (js版本的vue全家桶工程化模板)",
                    value: "vue-template-default",
                }
            ],
        },
    ];
    const answers = await inquirer.prompt(promptList);  // 执行命令行交互,并将交互的结果返回
    const {template} = answers
    console.log(`你选择的模板是:${template}`)
    return template  // 返回我们选择的模板
}

module.exports = {
    chooseTemplate
}

命令行执行:

ceshi create demoProject
  • 创建工程化模板push到github
git init
git add .
git commit -m "first commit"
git branch -M master
git remote add origin https://github.com/ceshi-cli/ceshi.git
git push -u origin master
  • 使用download-git-repo下载我的工程模板 我们先做模板名字的映射
    创建templateMap.js
const templateMap = new Map()

templateMap.set('vue-template-default',"https://github.com:ceshi/vue-template-default#master")

module.exports = templateMap

需要注意的是这里downloadUrl的格式,可以理解为仓库地址 + #分支名,但需要将仓库地址中https://github.com后面的 '/ '换成 ':'

否则你就会发现一直报128的错误
安装:

npm install download-git-repo

引入使用:

const download = require('download-git-repo')
const templateMap = require('./templateMap')
program
    .command('create <projectName>')
    .description('用于创建一个项目模板')
    .option("-T, --template [template]", "输入使用的模板名字")
    .action(async function(projectName, options){
        let template = options.template;
        projectName = projectName || 'untitled';

        if(!template){
            template = await chooseTemplate() // 注意这里是一个异步方法
        }

        const downloadUrl = templateMap.get(template) // templateMap是一个引入的自定义Map

        download(downloadUrl, projectName,{clone: true} , error => {
            if(error){
                console.log(`创建项目失败:${projectName}`)
                console.log('失败原因:',error)
            }else {
                console.log(`成功创建项目:${projectName}`)
            }
        })

    });

命令行里执行:

ceshi create demoProject

到此就完成了定制工程化项目功能

  • 美化命令行 使用ora美化loading效果
    安装:
npm install ora
// 下载前提示loading
    const spinner = ora({
        text: '正在下载模板...',
        color: "yellow",
        spinner: {
            interval: 80,
            frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
        },
    });
    spinner.start();
    const downloadUrl = templateMap.get(template)
        download(downloadUrl, projectName,{clone: true} , error => {
            if(error){
                spinner.fail(`创建项目失败:${projectName}`)
                console.log('失败原因:',error.message)
            }else {
                spinner.succeed(`成功创建项目:${projectName}`)
            }
        })

使用chalk改变命令行颜色
安装:

npm install chalk
const chalk = require('chalk');
console.log(chalk.rgb(216, 27, 96)('hello world'))
console.log(chalk.cyanBright('ceshi-cli命令行工具...\n'))

最后:

#! /usr/bin/env node

const { program } = require('commander') // 引入
const download = require('download-git-repo')
const templateMap = require('./templateMap')
const ora = require('ora')
const chalk = require('chalk');


const {chooseTemplate} = require('./inquirers')

 function start() {
    console.log(chalk.rgb(216, 27, 96)('hello world'))
    console.log(chalk.cyanBright('ceshi-cli命令行工具...\n'))

    program.version(require('./package.json').version) // 输出版对应的版本号

    program
        .command('create <projectName>')
        .description('用于创建一个项目模板')
        .option("-T, --template [template]", "输入使用的模板名字")
        .action(async function(projectName, options){
            let template = options.template;
            projectName = projectName || 'untitled';

            if(!template){
                template = await chooseTemplate() // 注意这里是一个异步方法
            }

            console.log(chalk.rgb(69, 39, 160)('你选择的模板是 👉'),chalk.bgRgb(69, 39, 160)(template))

            // 下载前提示loading
            const spinner = ora({
                text: '正在下载模板...',
                color: "yellow",
                spinner: {
                    interval: 80,
                    frames: ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"],
                },
            });
            spinner.start();


            /**
             * @downloadUrl   注意所需要的格式,不要直接复制粘贴仓库地址
             *
             * @project       项目名称
             *
             */
            const downloadUrl = templateMap.get(template)
            download(downloadUrl, projectName,{clone: true} , error => {
                if(error){
                    spinner.fail(`下载失败 😭😭😭`)
                    console.log(chalk.bgRgb(220,0,8)(`  创建项目失败:${projectName} `),'😭😭😭')
                    console.log('🧐🧐🧐 失败原因:',chalk.bgRgb(220,0,8)(error.message))
                }else {
                    spinner.succeed(`下载完成:${projectName}`)
                    console.log('✌✌✌',chalk.rgb(69, 39, 160)('成功创建项目  👉  '),chalk.bgRgb(69, 39, 160)(projectName))
                }
            })

        });

    program
        .command('checkAll')
        .description('查看所有的模板')
        .action(function(){
            const templateList = [
                'vue-default-template'
            ]
            templateList.forEach((temp,index) => {
                console.log(chalk.rgb(69, 39, 160)(`(${index+1})  ${temp}`))
            })
        })

    program.parse(process.argv);
}


start()

npm-check-updates

  • ncu 更新package版本

About

前端问题和解决方案

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages