搭建个人脚手架

1 前言

1.1 目的

使项目快速进入开发阶段,解决万事开头难的问题

1.2 最终效果

通过运行命令,从远端下载代码模板,并能自定义文件夹名称、package.json的部分信息

2 目录结构

GitHub
Gitee

├── package.json
├── template.json
├── node_modules
├── bin
│   └── yana-cli.js                                     # 命令脚本
├── lib
│   ├── util
│   │   ├── generator.js
│   │   └── git-user.js
│   ├── create.js                                       # 选择一个模板生成项目
│   └── list.js                                         # 查看模板列表

3 创建命令

尽量不要使用 Git Bash ,可能会有箭头、颜色等失效问题,直接使用 CMD

3.1 package.json 文件初始化

$ npm init --yes

3.2 新建 yana-cli.js

  • 根目录下新建 bin 文件夹
  • 在 bin 文件夹下新建 yana-cli.js
  • 将以下内容粘贴到 yana-cli.js
#! usr/bin/env node
console.log(process.argv)

#! usr/bin/env node :这行代码不可删除,告诉系统当前脚本由 Node.js 来解析执行

3.3 添加命令路径

在根目录下找到 package.json ,添加 bin 字段

"bin": {
  "yana-cli": "bin/yana-cli.js"
}

3.4 添加软链接

$ npm link
  • 执行该命令,增加软链接到全局,成功后可直接全局使用 yana-cli
  • 若该命令执行失败,可以在网上查看对应解决方案
  • 最终无法成功执行,可直接使用 node bin/yana-cli 代替后续 yana-cli 执行命令

3.5 测试命令

$ yana-cli

成功输出以下内容

[
  'xxx\xxx\node.exe',
  'xxx\xxx\bin\yana-cli'
]

4 简化命令解析

4.1 安装 commander

$ npm i commander

4.2 修改 yana-cli.js 文件

#! /usr/bin/env node
const program = require('commander')
const config = require('../package.json')

program.version(config.version, '-v, --version')

// 定义使用方法
program
  .command('create')
  .description('选择模板生成项目')
  .action(() => {
    require('../lib/create')
  })

program
  .command('list')
  .description('查看当前可用模板')
  .action(() => {
    require('../lib/list')
  })

// 解析参数
program.parse(process.argv)
if (!program.args.length) {
  program.help()
}

执行 yana-cli 输出以下内容
在这里插入图片描述

5 新增list命令

5.1 新建 list.js 文件

  • 根目录下新建 lib 文件夹
  • 在 lib 文件夹下新建 list.js
  • 将以下内容粘贴到 list.js
const template = require('../template.json')

console.log('当前模板列表如下:\n')
console.log(template)

5.2 新建 template.json 文件

  • 根目录下新建 template.json 文件
  • 将以下内容粘贴到 template.json
{"vue3-project-template":"https://gitee.com/YanaDH/vue3-project-template.git"}

执行 yana-cli list 输出以下内容
在这里插入图片描述

6 新增create命令

6.1 安装插件

$ npm i download-git-repo inquirer handlebars
  • download-git-repo :执行 git clone 克隆模板仓库
  • inquirer 根据用户输入内容自定义模板
  • handlebars 替换 package.json 中项目元信息

package.json 指的是 template.json 文件配置的vue3-project-template模板仓库里的 package.json 文件,需要被替换的地方需要使用{{}}包裹起来

在这里插入图片描述

6.2 新建 create.js

  • 在 lib 文件夹下新建 create.js
  • 将以下内容粘贴到 create.js
const templateUrl = require('../template.json')['vue3-project-template']
const download = require('download-git-repo')
const inquirer = require('inquirer')
// 新增项
const fs = require('fs')
const path = require('path')
const handlebars = require('handlebars')

download(`direct:${templateUrl}`, 'tmp', { clone: true }, (err) => {
  if (err) return
  const packagePath = path.join(__dirname, '../', '/tmp/package.json')
  const content = JSON.stringify(require(packagePath), '', '\t')
  const template = handlebars.compile(content)
  inquirer
    .prompt([
      { name: 'name', message: '请输入项目名称' },
      { name: 'description', message: '请输入项目描述' },
      { name: 'author', message: '请输入项目作者' },
    ])
    .then((params) => {
      const result = template(params)
      fs.writeFileSync(packagePath, result)
      console.log(params)
    })
})

6.3 create 命令测试

$ yana-cli create

若 inquirer 报错,则降低 inquirer 版本为8.2.4
在这里插入图片描述

终端输出以下内容
在这里插入图片描述

对应目录生成 tmp 文件夹,且下载下来的模板仓库 package.json 文件中 name、description、author 为刚刚输入内容
在这里插入图片描述

7 发布NPM包

若没有npm账号,需要先注册一个

# 1. 登录npm,输入用户名、密码
$ npm login
# 2. 发布
$ npm publish

发布成功后可直接通过 npm i yana-cli 进行安装

8 脚手架优化

GitHub
Gitee

8.1 安装插件

$ npm i chalk ora metalsmith
  • chalk :给控制台打印内容添加颜色
  • ora :给控制台打印内容添加loading
  • metalsmith :自定义文件夹名称

8.2 新增 generator.js 文件

替换 package.json 文件中的 name、description、author

  • 在 bin 文件夹下 util 文件夹
  • 在 util 文件夹下新建 generator.js 文件
  • 链接内容粘贴到 generator.js

8.3 新增 git-user.js 文件

直接将 package.json 文件中的 author 设置为本地 Git 配置的用户名

  • 在 util 文件夹下新建 git-user.js 文件
  • 链接内容粘贴到 git-user.js

8.4 修改 create.js 文件中

控制台增加颜色、loading等显示
链接内容粘贴到 create.js

$ yana-cli create
  • 若 ora 报错,则将 ora 版本降为8.2.4
  • 若 chalk 报错,则将 chalk 版本降为4.1.1
    在这里插入图片描述

9 自动部署

9.1 获取 NPM TOKEN

npm生成 NPM TOKEN

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

9.2 配置 NPM TOKEN

将 yana-cli 脚手架项目推到 GitHub ,并将生成的 NPM TOKEN 配置到 GitHub 对应仓库
在这里插入图片描述

9.3 添加 Action 脚本

在这里插入图片描述

在这里插入图片描述

  • 将以下内容粘贴到 mian.yml
  • 其中NODE_AUTH_TOKEN对应的值secrets.npm_tokennpm_token需要与上一步骤配置的NPM TOKEN 名称一致
  • 当有代码 push 到仓库时, Action 脚本将会自动执行,将包发布到 NPM
name: Publish To Npm
on:
  push:
    branches: [ "master" ]
 
jobs:
  publish-npm:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v1
        with:
          node-version: "12.x"
          registry-url: https://registry.npmjs.org/
      - run: npm publish
        env:
          NODE_AUTH_TOKEN: ${{secrets.npm_token}}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值