之前从来没接触过这类的课题,自己写命令行工具,没写过之前觉得这是一个很高大上的玩意儿,写过之后才发现原来不难。写之前当然是先在网上扒拉扒拉,看看别人怎么写的,结果找来找去,千篇一律,一个字也不带换的,还都是从npm仓库中复制下来的,还复制的不全,我已无力吐嘈!!!!
最后还是在NPM仓库中找到一段比较符合自己的介绍,就是自定义命令,下面就按照我的代码记录一下我是怎么写的。
首先创建项目,alaska-cli,编辑package.json,加入babel等就不细说了,目录结构如下:
alaska-cli
-index.js
-src
--alaska-build.js
本项目依赖commander包,这是一个非常方便简单的开发自己的CLI命令的包。
先看index.js:
'use strict'; const program = require('commander'); const buildAdmin = require('./src/alaska-build'); program .version('0.1.0') .command('alaska-build') .alias('build') .description('build admin views') .action(buildAdmin); program.parse(process.argv);
导入commander, 导入CLI命令背后要执行的函数文件。
使用commander创建命令:
.version('0.1.0')
命令版本,这个没什么好说的。
.command('alaska-build')
命令名字,就是以后可以直接在命令窗口使用的名字,像webpack babel等。
.alias('build')
命令的别名,就像小名一样,一般是个短名字。
.description('build admin views')
命令介绍,生辰八字什么的可以写到这,
.action(buildAdmin);
执行命令时要调用的函数,
program.parse(process.argv);
开始解析命令。
到这已经差不多了,我要说现在收尾你信么,不管你信不信,反正我是信了,剩下的就是写这个命令要怎么做事了。
看alaska-build.js:
/** * 所有读取文件时的错误处理 * */ function excludeError(err, files) { if (err) { console.log(err); } else { if (typeof files === 'object' && files.length > 0) { collection(files); } else { console.log('未找到要构建的文件!'); } } } module.exports = function () { fs.readdir(path, excludeError); };
这一段不用说了吧,就是读取一个目录下的所有文件,从每个文件里导出一些数据组合再输出到另一个目录下。
写完这些逻辑,这个项目基本上已经完了,把项目上传到NPM仓库,在其他项目里就可以用 npm install
来安装这个包,之后就能像webpack babael 这类的命令一样直接用了。
github : https://github.com/maichong/alaska-cli.git