看之前熟读已下文章:

跟着老司机玩转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自定义命令行相关推荐

  1. Tensorflow |(5)模型保存与恢复、自定义命令行参数

    Tensorflow |(1)初识Tensorflow Tensorflow |(2)张量的阶和数据类型及张量操作 Tensorflow |(3)变量的的创建.初始化.保存和加载 Tensorflow ...

  2. 使用Chatkit构建Node.js命令行聊天应用程序

    by Hugo 雨果 使用Chatkit构建Node.js命令行聊天应用程序 (Build a Node.js command-line chat application with Chatkit) ...

  3. 命令行编译_[Bazel]自定义命令行编译标志

    1 名词 2 背景 3 自定义构建设置的定义 4 自定义构建设置的实现和实例化 5 自定义规则绑定自定义构建设置 6 小结 7 参考资料 1 名词 这里名词只做个索引,方便理解,可能现在反而让理解变得 ...

  4. android模拟器命令大全,玩转安卓模拟器命令行

    玩转安卓模拟器命令行 启动模拟器 使用 emulator -avd 来启动指定的安卓模拟器, 例如, 我的电脑上配置了下列模拟器: 要启动名称为 "JB_Pad" 的模拟器, 只要 ...

  5. node 使用命令行运行esm脚本

    原文链接: node 使用命令行运行esm脚本 上一篇: fp-ts 简单瞅瞅 下一篇: js 简单卡通滤镜 https://www.npmjs.com/package/esm 主要是在scripts ...

  6. 怎样开发一个 Node.js 命令行工具包

    大家好,我是若川.最近组织了源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步.同时极力推荐订阅我写的<学习源码整体架构系列> ...

  7. node.js命令行程序在Windows系统和Linux系统下的部署

    在Windows系统下全局部署node.js写的命令行程序 我们有一个简单的命令行程序,使用node.js的commander模块写的,只有一个文件hello.js,其内容如下: #!/usr/bin ...

  8. node开发命令行脚本

    前端日常开发中,会遇见各种各样的cli,比如一行命令帮你打包的webpack,一行命令帮你生成vue项目模板的vue-cli,还有创建react项目的create-react-app等等等等.这些工具 ...

  9. scons 自定义命令行参数传递

    scons 在做命令的时候, 可能需要一些自定义的编译选项, 开始直接用 parse 参数传, 结果一直报错, 后面找到官方的提供的方法, 比如这样 scons debug=1 在scons里面有个 ...

最新文章

  1. “阿里巴巴大数据系统体系”学习笔记-纲领篇
  2. docker mysql 报错 “Too many connections 1040“ 修改最大连接数 未生效 解决方法
  3. unity中怎么在InspectorI面板加LOGO
  4. sharing-jdbc实现读写分离及分库分表
  5. 启继承父位在什么时候_为什么少儿口才现在越来越受到家长们的重视
  6. RocketMQ基础概念剖析源码解析
  7. R语言学习笔记(三)多元数据的数据特征、相关分析与图形表示
  8. ORA-01403: no data found
  9. caffe的python接口学习(5):生成deploy文件
  10. 两种获取python版本的方法
  11. matlab ga工具箱 使用教程,MATLAB深度学习工具箱使用教程
  12. ACM竞赛入门分析与学习资源总结
  13. 数学分析教程(科大)——5.2笔记+习题
  14. web前端之HTML常用标签
  15. Ubuntu 16.04静态IP设置
  16. 计算机课代表中段考总结,中段考试总结与反思
  17. CSS背景图片background如何改变大小以及样式设置
  18. (008)前端css,js,Jquery,Servlet入门
  19. 什么是嵌入式AI开发?人工智能芯片指什么?STM32、树莓派、Jetson TX2、华为昇腾部署神经网络区别在哪?
  20. 前端基础——CSS布局

热门文章

  1. Zookeeper开源客户端框架Curator的简单使用
  2. javascript实现的图数据结构的广度优先 搜索(Breadth-First Search,BFS)和深度优先搜索(Depth-First Search,DFS)...
  3. I.MX6 android 源码下载
  4. shell 读取配置文件
  5. 坚持的力量 第十五篇
  6. Android短信的发送和广播接收者实现短信的监听
  7. 隐藏在程序旮旯中的“安全问题”
  8. 小技巧: 从开始菜单进行网络搜索
  9. flex图表数据动态更新效果示例
  10. 刷新aspx页面的六种方法