node.js命令行程序在Windows系统和Linux系统下的部署
在Windows系统下全局部署node.js写的命令行程序
我们有一个简单的命令行程序,使用node.js的commander
模块写的,只有一个文件hello.js
,其内容如下:
#!/usr/bin/env node
// 引入commander模块
const {Command, Option} = require('commander');
const program = new Command();
program.version('0.0.1', '-v, --ver', '版本信息');// 设置选项
program.option('-m, --msg <content>', '输出指定文本')program.parse();// 选项处理
if (program.opts().msg) {console.log('hello ' + program.opts().msg);
}
如上,我们要启动这个hello.js
文件必须在与hello.js
同级目录下,在命令行输入node hello.js -m 参数值
来调用该命令。
其中node
表示使用node环境;hello.js
是待执行的脚本文件;-m 参数值
是指该命令的选项。package.json
内容默认如下:
{"name": "hello-nodejs","version": "1.0.0","description": "","main": "index.js","scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","dependencies": {"commander": "^8.3.0"}
}
但我们现在不想要输入hello.js
了,想要把.js
后缀给去掉。也是可以的:
但我们想要在Windows系统下的任意目录执行node hello -m 张三
却是不行的,会报错:
如果执行使用hello -m 张三
又会提示'hello' 不是内部或外部命令,也不是可运行的程序或批处理文件。
只能在该项目下才能调用执行该命令。我们肯定希望在项目的任意目录下都能使用该命令并且不使用node
前缀。
首先,在项目下的package.json
文件中,添加一个"bin"
项:
"bin": {"hello": "./hello.js"}
说明:
"hello"
是自定义的命令名称,可以任意取。"./hello.js"
是你要执行文件的路径。package.json
其他可不变。
完整package.json
内容如下:
{"name": "hello-nodejs","version": "1.0.0","description": "","main": "index.js","bin": {"hello": "./hello.js"},"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","dependencies": {"commander": "^8.3.0"}
}
接着在该项目下执行npm link
或者npm install . -g
进行全局安装。
执行完之后,可以在node.js的安装目录下看到hello.cat
相关文件
并且在安装目录下的node_modules
子目录下还有指向该项目实际目录的快捷方式:
现在你就可以在你Windows系统下的任意目录下执行该命令了:
在Linux系统下全局部署node.js写的命令行程序
将上面的整个项目压缩打包上传到Linux系统上:
对压缩包进行解压:
解压后,进入到项目中,执行npm install . -g
命令进行全局安装:
在项目目录下执行hello -m world
命令是不可以的,会报错提示命令没有被找到;而执行node hello -m world
是可以的,表示使用node环境启动该项目的hello.js文件并传入选项-m world
。
在非该项目目录下继续执行上面的两条命令,其中hello -m world
仍然报错没有找到该命令;而node hello -m world
则提示在当前目录下没有/root/hello
这过模块。
而我们的目的是在Linux系统下的任意目录执行hello -m 参数值
命令都可以得到期望的结果,而不是报错。
那我们程序是否全局安装了呢,其实是已经安装了的。通过find / -name hello
命令可以查找到在node.js下有一个名为hello
的文件,就是我们全局安装的项目文件。
如果我们带上这个路径去执行该命令呢,是可以的:
因为linux系统上通过npm全局安装了模块以后,不能像windos下面那样自动配置环境变量,需要自己动手配置。所以我们需要自己给该项目配置环境变量。
执行export PATH=/root/home/installation-packages/node.js/node.js/bin:$PATH
命令配置node.js的环境变量,其实就是配置的node.js的环境变量,此后任何项目再上传后进行全局安装后都可以使用,而不需要再配置一次环境变量了。但注意export
配置的环境变量只对本次会话有效,如果想要永远有效,则可以写入到/etc/profile
文件中。/root/home/installation-packages/node.js/node.js/bin
就是node.js在Linux安装路径中的bin目录的绝对路径。
现在在Linux系统的任意目录下执行hello -m 参数值
命令都可以了
最后给出上传到Linux系统上的项目的两个核心文件:
hello.js
#!/usr/bin/env node
// 引入commander模块
const {Command, Option} = require('commander');
const program = new Command();
program.version('0.0.1', '-v, --ver', '版本信息');// 设置选项
program.option('-m, --msg <content>', '输出指定文本')program.parse();// 选项处理
if (program.opts().msg) {console.log('hello ' + program.opts().msg);
}
package.json
{"name": "hello-nodejs","version": "1.0.0","description": "","main": "index.js","bin": {"hello": "./hello.js"},"scripts": {"test": "echo \"Error: no test specified\" && exit 1"},"author": "","license": "ISC","dependencies": {"commander": "^8.3.0"}
}
至于node_modules
目录下就是commander
模块了,自己去通过npm install --save commander
安装即可。没有说明commander
模块是如何使用的,这里只讲写好了的程序该如何部署。
node.js命令行程序在Windows系统和Linux系统下的部署相关推荐
- Nginx在Windows系统和Linux系统下的重启
一.Windows系统下重启nginx 1.杀掉nginx进程 tskill nginx echo 已终止所有ginx进程 2.启动nginx cd f:\nginx-1.0.5 nginx.exe ...
- Windows系统和Linux系统下安装MySQL
Windows系统下安装MySQL: 一.获取MySql 1.获取下载地址进行下载 https://dev.mysql.com/downloads/mysql/浏览器访问下载 选择这一步可以不用注册登 ...
- linux查看Windows的ip命令,在windows系统和linux系统中查询IP地址命令的不同
在linux和windows系统上查询IP地址的命令是不一样的. 在linux中的命令行模式下,输入ifconfig即可查询到IP.而在windows系统下要查询IP地址需要先打开dos命令行,然后输 ...
- android程序移动到Linux,Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输...
本文将带你了解Android应用开发之Android 系统 -- 使用Xshell在Windows系统和Linux系统之间进行文件传输,希望本文对大家学Android有所帮助. 使用Xshell在Wi ...
- linux执行class文件_「大数据干货」Windows系统和Linux系统中打jar包与导入语句剖析...
Jar包是Java中的压缩包格式,同Zip格式一样,用来对.class文件统一管理,如下是在Windows系统和Linux系统中不同的打包和执行.class程序的过程. windows: Linux: ...
- Android 系统(68)---使用Xshell在Windows系统和Linux系统之间进行文件传输
使用Xshell在Windows系统和Linux系统之间进行文件传输 Windows系统在安装虚拟机centos系统之后,如何进行两者之间的文件传输和互操作,或者如何在Windows端使用Xshell ...
- U盘/光盘制作windows系统和linux系统
U盘/光盘制作windows系统和linux系统 一 所需材料 1. UltraISO破解版(后附下载地址) 2. 相应的系统映象文件ISO,不同版本不一样,有自己需求的可以选择不一样,一般Windo ...
- 一台windows机器和一台linux机器之间互相拷贝文件的方法,windows系统和Linux系统之间拷贝文件***--pscp...
putty secure copy == pscp,是putty提供的文件传输***,通过ssh两件,在两台机器之间安全传输文件 获取pscp工具:http://www.chiark.greenend ...
- windows系统和linux系统可以使用相同的js代码吗_使用Sboxr自动发现和利用DOM(客户端)XSS漏洞...
这一系列的博客文章将向你展示如何在单页或富JavaScript的应用程序上识别DOM XSS的问题.作为示例,我们将在DOM XSS playground(https://domgo.at)上解决10 ...
最新文章
- ipv4 帧中继配置(GNS3)
- 1-VMware workstation认识
- c语言笔试题(带答案)
- high speed train is awesome
- linux java top_linux top命令 监测系统性能
- 2019年我总结的前端面试题
- 如何制作可以在 MaxCompute 上使用的 crcmod
- java 线程简介_java多线程介绍
- windows系统nexus3安装和配置
- 添加库文件_S7200的库文件导至200SMART正确操作
- .NET 应用从 Visual Studio 迁移到 Eclipse
- 免疫算法(Immune Algorithm,IA)实例详解
- Golang-PKCS8
- 产品狗的Python之路(2):excel表格拆分桌面小程序
- 52-20210322华为海思Hi3516DV300的linux系统编译(eMMC模式)1
- IOS开发—— 获取AppDelegate的属性或字段
- Android 建立自己的手写笔画图案 Gesture Builder
- 令人细思极恐的小故事_“&”号的令人惊讶的故事
- IGMP Snooping协议技术总结
- Google Android SDK开发范例大全
热门文章
- 第二十九章 OOTV杯超级模式大赛-模式总结(读书笔记)
- 4/20 Fizz Buzz(412)
- LENOVO服务器批量升级BMC固件
- HTML经过按钮时按钮变大,html – 调整按钮大小
- 介绍一款功能强大的步进电机控制驱动芯片TMC5240
- 解决Ueditor编辑器图片保存路径问题
- python实现labelme样本自动标注
- 1822 - Failed to add the foreign key constraint. Missing index for constraint ‘fk_tno_course‘ in the
- 图像Lanczos3滤波C实现——优化
- mysql8.0怎么样_MySQL8.0初体验