参考

用Node.js开发一个Command Line Interface (CLI)

开发前端 CLI 脚手架思路解析

前沿

git cz使用

git cz

package中配置:

  • 默认配置选项
  1. "config": {
  2. "commitizen": {
  3. "path": "cz-conventional-changelog"
  4. }
  5. }
  • 自定义提交选项
  1. "config": {
  2. "commitizen": {
  3. "path": "cz-customizable"
  4. }
  5. }

npm release

生产changelog

  • 指定版本
  1. npm run release -- --release-as 1.1.0
  • 主版本号
  1. npm run release -- --release-as major

生成2.0.0

  • 次版本号
  1. npm run release -- --release-as minor

生成2.2.0

准备

node > 10.0.0

开始

搭建

  • 创建cli对应的文件夹

mkdir we-cli && cd we-cli

  • 创建package

npm init

添加入库文件配置

  1. "main": "bin/we.js",
  2. "bin": {
  3. "we": "bin/we.js"
  4. }
  • 创建入口文件

mkdir bin && cd bin

touch we.js

并输出

console.log(this is my cli);

  • 全局使用

在命令行输入 npm linknpm install -gcli安装到全局,

这样就可以直接使用 we 命令了

用到的组件

  • figlet 基于ASCII字符组成的字符画【骚气的控制台输出】
  • commander CLI常用开发框架
  • chalk 终端文字加颜色js组件
  • clui spinners、sparklines、progress bars图样显示组件
  • shelljs node.js运行shell命令组件
  • blessed-contrib 命令行可视化组件
  • inquirer 命令行交互信息收集组件
  • log-symbols 可以在终端上显示出 √ 或 × 等的图标。
  • More

top-command-line-tools

发布

参考

  • nrm ls

列出所有的npm

  • npm login
  • npm publish

使用

版本

v0.1.0:

心得

关于Node

process.cwd()、dirname和filename的区别

  • process.cwd()

方法会返回 Node.js 进程的当前工作目录。

  • __dirname

当前模块的目录名。 相当于 __filenamepath.dirname()

  • __filename

当前模块的文件名。 这是当前的模块文件的绝对路径(符号链接会被解析)。

/Users/mjr 运行 node example.js

  1. console.log(process.cwd());
  2. // 打印: /Users/mjr
  3. console.log(__filename);
  4. // 打印: /Users/mjr/example.js
  5. console.log(__dirname);
  6. // 打印: /Users/mjr

当我们在 webpackApp 中执行 we serve,会打印出

  1. process.cwd() /Users/forguo/work/mine/we-cli/webpackApp
  2. __dirname /Users/forguo/work/mine/we-cli/lib/config/webpack
  3. __filename /Users/forguo/work/mine/we-cli/lib/config/webpack/webpack.dev.js

path.resolve()、path.join()的区别

  • path.join()

path.join() 方法会将所有给定的 path 片段连接到一起(使用平台特定的分隔符作为定界符),然后规范化生成的路径。

长度为零的 path 片段会被忽略。 如果连接后的路径字符串为长度为零的字符串,则返回 ‘.’,表示当前工作目录。

  • path.resolve()

path.resolve() 方法会将路径或路径片段的序列解析为绝对路径。