@mpx/cli 脚手架源码解析

前言

Mpx是一款致力于提高小程序开发体验的增强型小程序框架,通过Mpx,我们能够以最先进的web开发体验(Vue +
Webpack)来开发生产性能深度优化的小程序。

下面说说mpx脚手架的源码:
源码地址:https://github.com/didi/mpx/tree/master/packages/cli
目录结构:

.
├── README.md 
├── bin
│   ├── mpx-init.js // init命令开始执行的内容
│   └── mpx.js // 命令入口文件
├── lib
│   ├── ask.js // 自定义工具-用于询问开发者
│   ├── check-version.js // 检查本地node和npm包版本
│   ├── eval.js // 在data的作用域执行exp表达式并返回其执行得到的值
│   ├── filter.js // 配合metalsmith删除过滤多余的文件
│   ├── generate.js // 模板下载后根据用户选择生成指定模板
│   ├── git-user.js // 用于获取本地的git配置的用户名和邮件,并返回格式 姓名<邮箱> 的字符串
│   ├── local-path.js // 判断本地文件是否存在
│   ├── logger.js // 记录日志
│   └── options.js // 获取模板的选项配置信息并初始化默认值
├── package-lock.json
└── package.json

文件分析

package.json
{
  "name": "@mpxjs/cli",
  "version": "2.1.0",
  "description": "mpx脚手架",
  "bin": {
    "mpx": "bin/mpx.js",
    "mpx-init": "bin/mpx-init.js"
  },
  "dependencies": {
    "async": "^2.4.0",
    "chalk": "^2.1.0",
    "commander": "^2.9.0",
    "download-git-repo": "^1.0.1",
    "inquirer": "6.3.1",
    "metalsmith": "^2.1.0",
    "minimatch": "^3.0.0",
    "multimatch": "^2.1.0",
    "nunjucks": "^3.1.2",
    "ora": "^1.3.0",
    "read-metadata": "^1.0.0",
    "request": "^2.67.0",
    "rimraf": "^2.5.0",
    "semver": "^5.1.0",
    "tildify": "^1.2.0",
    "update-notifier": "^2.5.0",
    "user-home": "^2.0.0",
    "validate-npm-package-name": "^3.0.0"
  },
  "keywords": [
    "mpx",
    "cli"
  ],
  "author": "donghongping",
  "license": "Apache",
  "main": "bin/mpx-init.js",
  "directories": {
    "bin": "bin",
    "lib": "lib"
  },
  "files": [
    "bin",
    "lib"
  ],
  "publishConfig": {
    "registry": "https://registry.npmjs.org"
  },
  "repository": {
    "type": "git",
    "url": "git@github.com:didi/mpx.git"
  },
  "homepage": "https://didi.github.io/mpx/",
  "bugs": {
    "url": "https://github.com/didi/mpx/issues"
  },
  "engines": {
    "node": ">=8.0.0"
  },
  "scripts": {
    "test": "echo \"Error: run tests from root\" && exit 1"
  }
}

安装依赖包
  • async:异步处理工具
  • chalk :用于高亮终端打印出来的信息
  • commander: 命令行处理工具
  • download-git-repo: 用于下载远程仓库至本地 支持GitHub、GitLab、Bitbucket
  • inquirer:用于命令行与开发者交互
  • metalsmith:静态网站生成器
  • minimatch:字符匹配工具
  • multimatch:可以支持多个条件的匹配
  • nunjucks:js模板引擎
  • ora:用于命令行上的加载效果
  • read-metadata:用于读取json或者yaml元数据文件并返回一个对象
  • request :发送http请求的工具
  • rimraf:相当于UNIX的“rm -rf”命令
  • semver:版本号处理工具
  • tildify:将绝对路径转换成带波浪符的路径
  • update-notifier:更新node和npm包
  • user-home: 用于获取用户的根目录
  • validate-npm-package-name:用于npm包的名字是否是合法的
入口文件
mpx.js
#!/usr/bin/env node

require('commander')
  .version(require('../package').version)
  .usage('<command> [options]')
  .command('init', 'generate a new project from a template')
  .parse(process.argv)

主要是根据init命令执行max-init.js文件内容;

mpx-init.js

引入依赖包:忽略

指令引导提示:

// 指令引导
program
  .usage('[project-name]')
  .option('-c, --clone', 'use git clone')
  .option('--offline [value]&
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值