前言
❝原文地址:https://github.com/Nealyang/PersonalBlog
❞
脚手架其实是大多数前端都不陌生的东西,基于前面写过的两篇文章:
大概呢,就是介绍下,目前我的几个项目页面的代码组织形式。
用了几个项目后,发现也挺顺手,遂想着要不搞个 cli
工具,统一下源码的目录结构吧。
这样不仅可以减少一个机械的工作同时也能够统一源码架构。同学间维护项目的陌生感也会有所降低。的确是有一部分提效的不是。虽然我们大多数页面都走的大黄蜂搭建????。。。
❝❞
cli
工具其实就一些基本的命令运行、CV
大法,没有什么技术深度。
bin
效果
工程目录
代码实现
bin/index.js
#!/usr/bin/env node
'use strict';
const currentNodeVersion = process.versions.node;
const semver = currentNodeVersion.split('.');
const major = semver[0];
if (major < 10) {
console.error(
'You are running Node ' +
currentNodeVersion +
'.\n' +
'pmCli requires Node 10 or higher. \n' +
'Please update your version of Node.'
);
process.exit(1);
}
require('../packages/initialization')();
这里是入口文件,比较简单,就是配置个入口,顺便校验 node
的版本号
initialization.js
这个文件主要是配置一些命令,其实也比较简单,大家从 commander
里面查看自己需要的配置,然后配置出来就可以了
就是根据自己需求去配置这里就不赘述了,除了以上,就以下两点实现:
功能入口
// 创建工程
program
.usage("[command]")
.command("init")
.option("-f,--force", "overwrite current directory")
.description("initialize your project")
.action(initProject);
// 新增页面
program
.command("add-page <page-name>")
.description("add new page")
.action(addPage);
// 新增模块
program
.command("add-mod [mod-name]")
.description("add new mod")
.action(addMod);
// 添加/修改 .pmConfig.json
program
.command("modify-config")
.description("modify/add config file (.pmCli.config)")
.action(modifyCon);
program.parse(process.argv);
兜底
所谓兜底就是输入 pm-cli
后没有跟任何命令
pm-cli init
在说 init
之前呢,这里有个技术背景。就是我们的 rax
工程,基于 def 平台初始化出来的,所以说自带一个脚手架。但是我们在源码开发中呢,会对其进行一些改动。为了避免认知重复呢,init
我分为两个功能:
init projectName
从 0 创建一个def init rax projectName
项目在 raxProject 里面 init 会基于当前架构补充我们所统一的源码架构
init projectName
❝这里我们在一个空目录中进行演示
❞
init
至于这里的一些问题的交互就不介绍了,就是inquirer
配置的一些问题而已。没有太大的参考价值 。
入口方法较为简单,其实就是区分当前运行 pm-cli init
到底是基于已有项目初始化,还是新建一个 rax
项目 ,判断依据也非常简单,就是判断当前目录下是否有 package.json
来
虽然这么判断感觉是草率了点,但是,你细品也确实