仲灏小栈 仲灏小栈
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

仲灏

诚意, 正心, 格物, 致知
首页
大前端
后端&运维
其他技术
生活
关于我
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《前端项目基础建设》
  • HTML&CSS

  • JavaScript&TypeScript

  • Node

    • nvm 使用
    • nvm 深度使用解析
    • pnpm 学习
    • pnpm 使用及问题处理
    • npm yarn pnpm命令对比
    • koa学习
    • restful api笔记
    • Egg.js 技巧
    • Sequelize 学习笔记
    • npm 使用记录
    • node 记错修复
    • npm 仓库
    • 安装npm的过程中发生了什么
    • 想用而找不到的 npm 插件
    • node全局脚本原理解析
    • 转-commander
    • 制作自己的npm包
    • lerna
    • lerna - Lerna an Nx
    • lerna - 功能点
    • lerna API参考
    • Egg.js 技巧 问题集合
    • Node+vue打造全栈资源分享网站
    • 脚手架核心流程开发
      • 拆分原则
      • 执行准备
        • 检查版本号
        • 检查node 版本
        • 检查root启动
        • 检查用户主目录
        • 检查入参
        • 检查环境变量
        • 检查是否为最新版本
    • Untitled
  • 构建

  • Vue

  • React

  • 小程序

  • 跨端

  • Electron

  • WebGL&GIS

  • 浏览器

  • 面经

  • 其他

  • 大前端
  • Node
仲灏
2023-02-06
目录

脚手架核心流程开发

image-20230207132755711

# 拆分原则

根据模块的功能拆分:

  • 核心模块: core
  • 命令模块: commands
  • 模型模块: models
  • 工具模块: utils

root-check

尝试降级具有root权限的进程的权限,如果失败则阻止访问

# 执行准备

创建功能模块文件夹, 并配置lerna packages

# 检查版本号

添加log lerna包

lerna create @zh-dev-cli/log utils 如果你像我这样包的路径修改了的话就需要注意在更路径的package.json文件中workspaces 添加utils

// utils/log/lib/index.js

const log = require('npmlog')
log.level = process.env.LOG_LEVEL ?? 'info'
log.heading = 'zh-dev-cli'
log.addLevel('success', 2000, {fg: 'green', bold: true})
module.exports = log;
1
2
3
4
5
6
7
// core/cli/lib/index.js

const pkg = require('../package.json')
const log = require('@zh-dev-cli/log')
function checkPkgVersion () {
    let version = pkg.version;
    log.notice('cli', version)
}
1
2
3
4
5
6
7
8

# 检查node 版本

semver

npm的语义版本器, 做各种各样的版本比对. 周下载量很高

colors

在node.js控制台中获取颜色和样式

Demo

// const.js

const LOWEST_NODE_VERSION = '12.0.0'

module.exports = {
    LOWEST_NODE_VERSION
}
1
2
3
4
5
6
7
// cli.js

const semver = require('semver')
const colors = require('colors/safe');
...
function checkNodeVersion() {
    const currentVersion = process.version
    const lowestVersion = constant.LOWEST_NODE_VERSION
    if(semver.lt(currentVersion, lowestVersion)) {
        throw new Error(colors.red(`zh-dev-cli 需要安装 v${lowestVersion} 以上版本的 Node.js`))
    }
}

function core () {
    try {
        checkPkgVersion()
        checkNodeVersion()
    } catch (e) {
        log.error(e?.message)
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

# 检查root启动

process.geteuid() 如果是0 , 说明是root账户, root账户所创建的文件是属于root账户的, 不变改写. 需要降级

root-check

尝试降级具有root权限的进程的权限,如果失败则阻止访问

img

lerna add root-check@1.0.0 core/cli 安装

function checkRoot() {
    const rootCheck = require('root-check')
    rootCheck()
}
1
2
3
4

# 检查用户主目录

user-home 废弃 使用os-homedir

返回当前用户的主目录。

path-exists

检查路径是否存在

安装: lerna add path-exists@4.0.0 core/cli 5.0.0版本需要使用到import导入, 与cjs不符

const pathExists = require('path-exists').sync;
...
function checkUserHome() {
    if(!userHome || !pathExists(userHome)) {
        throw new Error(colors.red('当前登录用户主目录不存在'))
    }
}
1
2
3
4
5
6
7

# 检查入参

minimist

解析参数选项 这个模块是乐观主义者的论点解析器的核心,没有任何花哨的装饰。

// 示例
var argv = require('minimist')(process.argv.slice(2));
console.log(argv);

$ node example/parse.js -a beep -b boop
{ _: [], a: 'beep', b: 'boop' }
1
2
3
4
5
6
checkInputArgs()
const log = require('@zh-dev-cli/log')
...
function checkInputArgs() {
    const argv = require('minimist')(process.argv.slice(2));
    checkArgs(argv)
}

function checkArgs(args) {
    process.env.LOG_LEVEL = args.debug ? 'verbose' : 'info'
}
...
1
2
3
4
5
6
7
8
9
10
11
12

# 检查环境变量

dotenv

Dotenv是一个零依赖模块,它将环境变量从.env文件加载到process.env中。将配置与代码分开存储在环境中是基于the Twelve Factor App方法。

# 检查是否为最新版本

  • 拿到当前版本号和包名

  • 通过包名在线上通过ajax拿到所有的版本, 并对其倒序排序, 最后取第一个

  • 把最新版本号和当前版本号作对比

上次更新: 2023/06/10, 12:06:41
Node+vue打造全栈资源分享网站
Untitled

← Node+vue打造全栈资源分享网站 Untitled→

最近更新
01
vim日常使用记录
04-02
02
滑动窗口最大值
04-02
03
有效的字母异位词
04-02
更多文章>
Theme by Vdoing | Copyright © 2021-2025 izhaong | github | 蜀ICP备2021031194号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式