一 手工
抛开npm工程化添加命令,一开始想着配置环境变量的都是都是把命令的执行程序的路径添加进去,那么如果我们自己想要执行的命令不也就可以这样,摸索了一番,最后上网查了一下资料果然验证了我的想法,在这里记录下。
- 开始,想要写一个js脚手架工具的cli,那肯定要有自己的命令行;
- 其次,要知道命令行其实本质都是在cmd或者shell命令,那么我们需要知道如何取创建自己的命令行;
- 创建命令行的两个必备:命令执行脚本,含有window命令的脚本,可以使cmd文件也可以是bat的windows批处理文件;
- 第三步:配置自己命令行的环境变量,其实命令行的执行都是在环境变量里查找匹配执行的。
详细步骤:
我们以node举例,其实java脚本处理也是类似的
- 1,创建自己的js文件,内容可以自己定,只要能在node环境下执行就可以了,因为这个命令的本质是node环境下执行的例如
console.log('start');
保存在一个特定的文件夹里,记住这个路径例如我这里的路径(C:\Users\***\Desktop\cmd\order.js);
- 2. 创建一个.bat批处理脚本
通常是这么写的echo off node C:\Users\***\Desktop\cmd\order.js %*
意思其实很简单,输出off 意思是关闭回显,简而言之就是不显示我们具体执行的脚本行,这样会显得高大上一些
第二行就是 node 执行文件 命令参数
保存,名字必须是你的想要的命令名:myorder.bat
到这里,其实已经可以直接执行.bat文件了,直接双击就可以了,只不过这样脚本执行完之后的窗口会立马关掉- 3.这一步就是添加命令的环境变量,和其他环境变量的添加方式样,
直接打开环境变量的编辑窗口,将.bat文件的父级路径copy进去就可以了。
这样就ok了,这个时候我们直接win+R就可以执行myorder这个命令了,可以看到cmd窗口打印出了start二 npm
那么回归到npm,npm做的其实就是把这几个步骤替我们做了
我们只需要准备一下配置就行了
一个简单的package.json,一个执行的js脚本
package.json和常见的一致,只不过多了一个bin字段,包括了我们要添加的命令和命令路径,相当于环境变量的path;"bin": { "myorder": "./myorder.js" }
批处理脚本#!usr/bin/env node console.log('start')
告诉当前bin的环境是node
然后直接npm login;输入账号密码;npm publish,这样就完成了
我们只需要npm install --save -g myorder就完成了。我们在控制台输入一下myorder
PS E:\test> myorder start PS E:\test>
此外还有clear命令可以直接清除控制台;其实是console.clear();
三 进阶
利用process,我们可以实现控制台的交互,例子如下
var readline = require('readline'), rdins = readline.createInterface({ input: process.stdin, output: process.stdout }), // 控制台输入的参数,需要用%*来匹配 args = process.argv.slice(2); console.log('请输入交互的第一个单词') rdins.on('line', (input) => { console.log('您输入的是:', input); if (input == 'close') { rdins.close(); } if (input == 'clear') { console.clear(); } }); rdins.on('close', (input) => { process.exit(0); })
2.利用child_process来调用系统的进程,来进行扩展;
举例我们现在有angular-cli的脚手架工具,当我们的项目文件目录已经定好时,我们只需要向固定的模块来添加不同的模块,而目录这一参数我们就可以省略;这时候就可以扩展
var exec = require('child_process').exec;//这里调用exec举例,也可以用spawn var path = '/' + process.argv.slice(2); exec('ng g component ' + path, {options}, function(){})//具体可以学习下child——process模块