node.js如何制作命令行工具(一)
之前使用过一些全局安装的NPM包,安装完之后,可以通过其提供的命令,完成一些任务。比如Fis3,可以通过fis3 server start 开启fis的静态文件服务,通过fis3 release开启文件编译与发布;还有vue-cli,可以通过vue init webpack my-project来初始化vue+webpack的项目基础配置。最近有一个需求,需要写一个类似vue-cli的NPM包,通过命令行操作实现项目初始配置,所以就查看了相关资料,学习了一下如何使用node来生成自己的命令。
编写命令行
命令的目标:在当前目录下开启一个静态文件服务,端口号为8085
1.创建目录
构成命令的基础是需要一个命令文件web.js和package.json配置文件,执行以下命令:
$ mkdir node-commander #创建一个文件夹 $ cd node-commander && mkdir bin $ npm init #初始化package.json文件$ cd bin && touch web.js #创建命令文件
2.命令文件
#!/usr/bin/env nodevar express = require('express');
var path = process.cwd();function run(argv) {if (argv[0] === '-v' || argv[0] === '--version') {console.log('version is 1.0.0');}else if (argv[0] === '-h' || argv[0] === '--help') {console.log('usage:\n');console.log('-v --version [show version]')}else if (argv[0] === '-s' || argv[0] === '--start') {var app = new express();app.use('/static', express.static(path));app.listen(8085, function () {console.log('server start at port 8085');});}
}run(process.argv.slice(2));
文件的头部务必加入#!/usr/bin/env node这行代码,这里表示使用node作为脚本的解释程序,node的路径通过env来查找,可以避免node安装路径不一带来的问题。
其中process为node进程中的全局变量,process.argv为一数组,数组内存储着命令行的各个部分,argv[0]为node的安装路径,argv[1]为主模块文件路劲,剩下为子命令或参数,如下:
node ./bin/web.js a b c # process.argv的值为[ '/usr/local/bin/node', '/PATH/web.js', 'a', 'b', 'c' ]
3.命令配置
在package.json文件中添加bin字段:
"bin": { "web": "./bin/web.js"},
bin字段的作用:当安装npm包时,npm将添加一条命令/usr/local/bin/web,web命令软连接到web.js文件。
调试命令行
(1)采用install方法
进入npm包目录下,执行全局install,根据package.json中bin的配置,为全局命令创建软连。
# sudo npm install . -g/usr/local/bin/web -> /usr/local/lib/node_modules/cli-demo/bin/web.js /usr/local/lib `-- cli-demo@1.0.0...
查看web命令
# which web /usr/local/bin/web
执行web命令
# web --start server start at port 8085
(2)采用npm link方法
npm link方法创建了两个软连,命令与命令文件的软连,全局包与实际包文件的软连。
# sudo npm link/usr/local/bin/web -> /usr/local/lib/node_modules/cli-demo/bin/web.js /usr/local/lib/node_modules/cli-demo -> /Users/baidu/hwm/home/demos/node/node-commander
接下来可以按照方法(1)进行操作了。
发布命令包
通过npm publish进行发布,前提是有npm帐号。如何操作可以查看npm 官方文档。
本文是通过原生node.js来开发命令工具,而vue-cli是采用commander.js来简化命令工具开发,关于commander.js的使用方法,将在下一篇文章中介绍。
转载于:https://www.cnblogs.com/wmhuang/p/7052587.html
node.js如何制作命令行工具(一)相关推荐
- js list操作_使用 Node.js 实现一个命令行 todo-list(1)- 基本功能
功能介绍 为了熟悉 Node.js,使用 Node.js 制作一个命令行小工具,项目仓库:https://github.com/FuZhouJohn/node-todo,先来介绍一下功能: 添加任务: ...
- 基于node和npm的命令行工具——tive-cli
前端开发过程中经常会用到各种各样的脚手架工具.npm全局工具包等命令行工具,如:Vue脚手架@vue/cli.React脚手架create-react-app.node进程守卫工具pm2.本地静态服务 ...
- node工程默认url_node命令行工具之实现项目工程自动初始化的标准流程
一.目的 传统的前端项目初始流程一般是这样: 可以看出,传统的初始化步骤,花费的时间并不少.而且,人工操作的情况下,总有改漏的情况出现.这个缺点有时很致命. 甚至有马大哈,没有更新项目仓库地址,导致提 ...
- node.js mysql防注入_避免Node.js中的命令行注入安全漏洞
在这篇文章中,我们将学习正确使用Node.js调用系统命令的方法,以避免常见的命令行注入漏洞. 我们经常使用的调用命令的方法是最简单的child_process.exec.它有很一个简单的使用模式;通 ...
- node.js 最全命令行配置操作win10
** node.js安装教程就是下载 傻瓜式安装 接下来要配置相关环境 所有需要用到的脚本都在这里了. 历史版本的链接:https://nodejs.org/dist/ ** 查看node版本号 no ...
- uibot在子程序执行js失败_使用 Node.js 将珍藏的 bash 脚本封装成命令行工具
阐述如何将一个常用的 bash 脚本融入 npm 生态之中,此处以最近遇到的一个 CR 提交脚本为例. 背景 作为程序猿,大家或多或少地都用过 GitHub 上的 merge request 功能.当 ...
- GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。...
GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...
- 使用Node.js创建命令行工具
在我的职业生涯中我已经写了数百种Bash脚本,但在Bash方面仍然有很多不足.每次我都要为一些简单的逻辑结构去查阅语法.如果我想使用curl或sed做些特技,我还不得不去查找操作说明.我在我的正则表达 ...
- 使用node.js构建命令行工具
工具说明 inquirer.js:一个封装了常用命令行交互的node.js模块,通过该模块可以很方便地构建一个新的命令行应用. shell.js:跨平台的unix shell命令模块. Node版本: ...
- 从 1 到完美,用 node 写一个命令行工具
从 1 到完美,用 node 写一个命令行工具 1. package.json 中的 bin 字段 现在,不管是前端项目还是 node 项目,一般都会用 npm 做包管理工具,而 package.js ...
最新文章
- 一个在菜场看到的,神一般的大爷!
- flex image 控件显示bmp 格式图片
- php写新闻浏览历史,PHP实现浏览历史记录
- Windows下的常用的DOS命令
- Python turtle库实现基本剖析
- 点到点 Ipsec *** 从一端能正常发起,另一端发起不成功的解决过程
- 数据传输服务 DTS > 数据迁移 > 从自建数据库迁移至阿里云 > 源库为MySQL > 从自建MySQL迁移至RDS MySQL
- parallels网络初始化失败_出神入化:特斯拉AI主管、李飞飞高徒Karpathy的33个神经网络炼丹技巧...
- 【MVC】使用FormCollection获取Form表单数据
- 3D视频的质量评价报告 (MSU出品)
- Hibernate持久化对象状态
- 用 Chrome 扩展实现修改
- 【图像融合】基于matlab CBF算法图像融合【含Matlab源码 083期】
- python爬取妹子图片1_利用爬虫爬取清纯妹子图片
- 【数据结构】线性表之数组---C++语言描述
- 偏微分方程数值解法pdf_天生一对,硬核微分方程与深度学习的联姻之路
- TPLink 无线网卡模拟AP无法上网问题
- bilibili哔哩哔哩网页版中视频资源下载方法(无需任何工具)
- 北大美女辞去公司副总职务创业养狗
- Dreamoon Likes Coloring