跟着老司机玩转Node自定义命令行
看之前熟读已下文章:
跟着老司机玩转Node命令行
Nodejs 制作命令行工具
github.com/jaywcjlove/…
node生成自定义命令(yargs/commander)
通过nodejs实现自定义命令
inquirer.js —— 一个用户与命令行交互的工具
Node.js 命令行程序开发教程
输入命令后,npm帮我们做了以下这些工作
在全局的npm包环境中帮我们建立一个软链,路径在{prefix}/lib/node_modules/。其中prefix可以通过这条命令查询到:
npm get prefix
复制代码
将配置文件中的bins链接到全局:{prefix}/bin/{name} 看到这里,你应该了解我们正是借助第二步,实现自定义命令的。但第一步的命令又有什么作用呢?
npm link
第一步所做的工作将会为我们本地开发工具库带来很大的帮助。当我们的工具库还没完成的时候,我们并不想将其npm publish出去,而是希望先在本地调试一下。这时候,可以进入调试的目标项目,比如cmd-test文件夹,运行以下命令:
npm link cmd
复制代码
其中cmd就是我们的包名。运行完此命令后,npm会帮我们在cmd-test文件夹中的node_modules目录下建立一个cmd的软链。当然,前提是cmd-test文件夹中已经有node_modules目录,否则会一直向上找node_modules目录直到根目录位置。你也可以手动建一个。
npm link cmd的效果跟npm install cmd 效果是完全一样的,我们可以使用link过来的所有功能,这对我们本地调试工具库非常有帮助。
如果要去除这个软链,执行下面的命令就可以了:
npm unlink cmd
复制代码
说得有点远了,再扯回到自定义命令上面来。
错误处理
在运行
npm install . -g
复制代码
会有一堆警告可以忽视
如果你已经 npm link 搞了一遍你再 link 一遍,会报如下错误。即使你 npm unlink 也会报如下错误:
npm link
npm ERR! Darwin 14.3.0
npm ERR! argv "node" "/usr/local/bin/npm" "link"
npm ERR! node v0.10.36
npm ERR! npm v2.7.1
npm ERR! path /usr/local/bin/wcj
npm ERR! code EEXISTnpm ERR! Refusing to delete: /usr/local/bin/wcj not in /Applications/XAMPP/xamppfiles/htdocs/git/github.com/myJS/wcj
File exists: /usr/local/bin/wcj
Move it away, and try again.
让你删除 /usr/local/bin/wcj 再 npm link , 删除此目录运行 rm -rf /usr/local/bin/wcj
复制代码
发布到npm中
- 发布
必须注册 npm 账号,还有 github 账号,具体怎么玩儿问 谷歌大婶吧。在JSLite.io 中也有教程哦。
npm publish
复制代码
- 安装 前提你发布到了npm中,你就可以运行下面的命令了。
sudo npm install -g sx
复制代码
DEMO
- package.json
{"name": "sx","version": "1.0.0","description": "SX CMD","bin": {"sx": "bin/index.js"},"main": "index.js","author": "sx","license": "MIT","devDependencies": {"commander": "^2.19.0","yargs": "^13.2.1"}
}复制代码
- bin/index.js
#!/usr/bin/env nodevar program = require('commander');
var argv = require('yargs').argv;
program.allowUnknownOption() //取消这个自动报错机制.version('0.0.1').description('创建我的命令').option('-r, --resume', '简历').option('-d, --no-database [db]', '自定义数据') //后面可以选择是否跟参数值,no-*时默认值为false.option('-m, --mylove [db]', '我的最爱') //后面可以选择是否跟参数值,不加no-*时默认值为true.option('-l, --language <lang>', 'JS是我擅长的语言。') //<lang> required参数,使用时后边必须跟参数值, 否则程序会报错.action(option => {console.log('\n option回调:');console.log(JSON.stringify(option));}).on('--help', function() {console.log('---------------------------------------------------------------------------------------------')console.log(' 自定义的例子: ')console.log('')console.log(' 输出命令 sx -d')console.log(' 输出命令 sx -l node')console.log('')}).parse(process.argv)if(program.resume) {console.log('简历' + program.resume + '这个是我的简历!');
}if(program.language) console.log('我擅长的语言language: `' + program.language + '`');
if(program.database) console.log('我擅长的数据库`' + program.database + '`');
if(program.mylove) console.log('我的最爱`' + program.mylove + '`');console.log('\n program回调:');
console.log(program)
//console.log(JSON.stringify(program))console.log('\n argv回调:');
console.log(JSON.stringify(argv))
复制代码
跟着老司机玩转Node自定义命令行相关推荐
- Tensorflow |(5)模型保存与恢复、自定义命令行参数
Tensorflow |(1)初识Tensorflow Tensorflow |(2)张量的阶和数据类型及张量操作 Tensorflow |(3)变量的的创建.初始化.保存和加载 Tensorflow ...
- 使用Chatkit构建Node.js命令行聊天应用程序
by Hugo 雨果 使用Chatkit构建Node.js命令行聊天应用程序 (Build a Node.js command-line chat application with Chatkit) ...
- 命令行编译_[Bazel]自定义命令行编译标志
1 名词 2 背景 3 自定义构建设置的定义 4 自定义构建设置的实现和实例化 5 自定义规则绑定自定义构建设置 6 小结 7 参考资料 1 名词 这里名词只做个索引,方便理解,可能现在反而让理解变得 ...
- android模拟器命令大全,玩转安卓模拟器命令行
玩转安卓模拟器命令行 启动模拟器 使用 emulator -avd 来启动指定的安卓模拟器, 例如, 我的电脑上配置了下列模拟器: 要启动名称为 "JB_Pad" 的模拟器, 只要 ...
- node 使用命令行运行esm脚本
原文链接: node 使用命令行运行esm脚本 上一篇: fp-ts 简单瞅瞅 下一篇: js 简单卡通滤镜 https://www.npmjs.com/package/esm 主要是在scripts ...
- 怎样开发一个 Node.js 命令行工具包
大家好,我是若川.最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列> ...
- node.js命令行程序在Windows系统和Linux系统下的部署
在Windows系统下全局部署node.js写的命令行程序 我们有一个简单的命令行程序,使用node.js的commander模块写的,只有一个文件hello.js,其内容如下: #!/usr/bin ...
- node开发命令行脚本
前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等.这些工具 ...
- scons 自定义命令行参数传递
scons 在做命令的时候, 可能需要一些自定义的编译选项, 开始直接用 parse 参数传, 结果一直报错, 后面找到官方的提供的方法, 比如这样 scons debug=1 在scons里面有个 ...
最新文章
- “阿里巴巴大数据系统体系”学习笔记-纲领篇
- docker mysql 报错 “Too many connections 1040“ 修改最大连接数 未生效 解决方法
- unity中怎么在InspectorI面板加LOGO
- sharing-jdbc实现读写分离及分库分表
- 启继承父位在什么时候_为什么少儿口才现在越来越受到家长们的重视
- RocketMQ基础概念剖析源码解析
- R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示
- ORA-01403: no data found
- caffe的python接口学习(5):生成deploy文件
- 两种获取python版本的方法
- matlab ga工具箱 使用教程,MATLAB深度学习工具箱使用教程
- ACM竞赛入门分析与学习资源总结
- 数学分析教程(科大)——5.2笔记+习题
- web前端之HTML常用标签
- Ubuntu 16.04静态IP设置
- 计算机课代表中段考总结,中段考试总结与反思
- CSS背景图片background如何改变大小以及样式设置
- (008)前端css,js,Jquery,Servlet入门
- 什么是嵌入式AI开发?人工智能芯片指什么?STM32、树莓派、Jetson TX2、华为昇腾部署神经网络区别在哪?
- 前端基础——CSS布局
热门文章
- Zookeeper开源客户端框架Curator的简单使用
- javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)...
- I.MX6 android 源码下载
- shell 读取配置文件
- 坚持的力量 第十五篇
- Android短信的发送和广播接收者实现短信的监听
- 隐藏在程序旮旯中的“安全问题”
- 小技巧: 从开始菜单进行网络搜索
- flex图表数据动态更新效果示例
- 刷新aspx页面的六种方法