谈node.js命令行工具
首先,让我们看看package.json
每个项目的根目录下都有一个package.json文件,定义了这个项目需要的各种模块以及项目的配置信息。下面是一个相对完整的package.json文件
{ 'name': 'vue-cli ',' version': '2.9.3 ',' description': '一个用于搭建Vue.js项目简单cli ',' preferGlobal': true,' bin': { 'vue': 'bin/vue ',' vue-init': 'bin/vue-init ',' vue-list': 'bin/vue-list' },' repository': { 'type': ' ',' url': '' },'关键字' : [ ],' author ' : ' litongqian
指定了用于运行脚本命令的npm命令行的缩写,例如,start指定运行npm run start时要执行的命令。
2.箱字段
bin项用于指定对应于每个内部命令的可执行文件的位置
Bin' : {'vue' :' Bin/vue ',' vue-init' :' bin/vue-init ',' vue-list' :' bin/vue-list'},上面的代码指定vue命令对应的可执行文件为bin
3.npm链接
在开发NPM模块时,我们有时希望在开发和尝试时,例如在本地调试时,require('myModule ')会自动加载本地开发的模块。Node规定在使用模块时,需要将其安装在全局或项目node_modules目录下。对于正在开发的模块,解决方案是在全局node_modules目录中生成一个符号链接,指向模块的本地目录。
Npm链接可以扮演这个角色,并自动建立这个符号链接。
想象一个场景,您已经开发了一个带有src/myModule目录的模块myModule,它在您自己的项目myProject中使用,并且项目目录是src/myProject。首先,在模块目录(src/myModule)下运行npm链接命令。
src/myModule$ npm链接的上述命令将在npm的全局模块目录中生成一个符号链接文件,其名称是package.json文件中指定的模块名称。
/path/to/global/node _ modules/myModule-src/myModule此时,可以全局调用my module。然而,如果我们想在项目中安装这个模块,我们必须采取以下步骤。
切换到项目目录,再次运行npm link命令,并指定模块名称。
Src/myProject$ npm链接myModule上述命令相当于生成本地模块的符号链接。
复制的代码如下: src/my project/node _ modules/my module-/path/to/global/node _ modules/my module
然后,您可以在项目中加载该模块。
var myModule=required(' myModule ');这样,我的模块的任何变化都可以直接反映在我的项目中。然而,也有风险。对myProject目录中myModule的任何修改都将反映在模块的源代码中。
如果项目不再需要此模块,可以使用项目目录中的npm unlink命令删除符号链接。
Src/myproject $ NPM取消我的模块二的链接。可执行脚本
写一个简单的脚本你好
$ mkdir hello #创建文件夹
$ cd你好触摸你好#创建命令文件
#!/usr/bin/env node console . log(' hello world ');一定要加#!/usr/bin/env node,意思是节点作为脚本解释器,节点的路径由env搜索,可以避免节点安装路径不同带来的问题。
Open /usr/bin/env,可以查看路径,操作系统通过路径找到节点
然后,修改hello的权限。
$ chmod 755 hello$。/你好
如果想在hello之前删除path,可以将hello的path添加到环境变量PATH中。然而,另一个更好的方法是在当前目录中创建一个新的package.json,并编写以下内容。
{'name' :' hello ',' bin' : {'hello' : '。/hello'}}然后执行npm链接命令。不懂就看上面
$ npm链接
执行后,将生成一个全局映射关系,hello命令可以全局使用
三.命令行参数
命令行参数可以通过系统变量process.argv获得.
修改hello脚本
#!/usr/bin/env node console . log(' hello ',process . argv);其中process为节点进程中的全局变量,process.argv为数组,其中存储了命令行的所有部分,argv[0]为节点的安装路径,argv[1]为主模块文件路径,其余为子命令或参数,如下:
$你好a b c
# process.argv的值为['/usr/local/bin/node ','/usr/local/bin/hello ',' a ',' b ',' c']
脚本可以通过child_process模块创建新的子进程,从而执行Unix系统命令和修改hello
Exec方法用于执行bash命令。exec方法最多可以接受两个参数,第一个参数是要执行的shell命令,第二个参数是回调函数,它接受三个参数,即发生的错误、标准输出的显示结果和标准错误的显示结果。
#!/usr/bin/env node var name=process . argv[2];var exec=require('child_process ')。执行董事;var child=exec('echo hello '名称,函数(err,stdout,stderr){ if(err)throw err;console . log(stdout);});执行$ hello litongqian
如果我们想查看所有文件,修改你好
var name=process . argv[2];var exec=require('child_process ')。执行董事;var child=exec(name,function(err,stdout,stderr){ if(err)throw err;console . log(stdout);});执行$ hello ls
hello目录中有三个文件
四.shelljs模块
Child_process被重新打包在shell.js模块中,这样调用系统命令更加方便。安装后需要使用。
Npm install -保存shelljs,然后重写脚本。
#!/usr/bin/env node var name=process . argv[2];var shell=required(' shelljs ');shell.exec('echo hello '名称);五. yargs模块
Shelljs只解决如何调用shell命令,而yargs模块可以解决如何处理命令行参数。它也需要安装。
$ npminstall-saveyargsyargs模块提供了用于读取命令行参数的argv对象。请看改写后的《你好》。
#!/usr/bin/env node var argv=require(' yargs ')。argvconsole.log('hello ',argv . name);使用时,可以使用以下两种用法。
$ hello-name=Tom hello Tom $ hello-name Tom hello Tom,即process.argv的原始返回值如下。
$ nodehello-name=Tom ['node ','/usr/local/bin/hell ','-name=Tom'] yargs可以将上面的结果变成一个对象,每个参数项都是一个键值对。
不及物动词发布命令包
要通过npm publish发布,必须有一个npm帐户。如何操作,请参见npm官方文件。
本文使用原生node.js来开发命令工具,而vue-cli使用commander.js来简化命令工具的开发。
了解执行过程,学习相应的模块,你就会很好地了解原理!在这篇文章中抛砖引玉
最后,有时我们在:中使用的命令行不是全局安装的,而是本地安装的
1.package.json bin字段
Bin项用于指定每个内部命令对应的可执行文件的位置。
上面的代码指定了someTool命令对应的可执行文件是bin子目录下的someTool.js。
当一个项目依赖于上述工具时,它只在本地安装
{ 'name': 'myproject ',' devDependencies ' : { ' someool ' : ' latest ' },Scripts ' : { start: ' someool build '//相当于start :/node_modules/some tool/some tool . jsbuild ' } } NPM将查找此文件,并在node _ modules/下建立符号链接。bin/目录。在上面的例子中,someTool.js建立了符号链接npm_modules/。bin/someTool。因为node_modules/。bin/directory会在运行时添加系统的path变量,在运行npm的时候,可以通过命令直接调用这些脚本而不需要PATH。
所以像上面这样的写法可以缩写。
脚本: { start : }。/node _ modules/some tool/some tool . js build ' }//缩写为script s : { start 3360 ' some tool build ' } node _ modules/下的所有命令。bin/directory可以npm run [command]的格式运行在命令行中,键入npm run并按tab键,所有可用的命令都会显示出来。
1.npm运行
在上面的代码中,脚本字段指定了两个命令start。输入npm运行脚本开始或npm运行开始,有时将执行工具构建。Npm run是npm run-script的缩写。前者一般使用,但后者更能体现这一命令的精髓。
npm运行命令将自动添加node_modules/。bin目录添加到环境变量$PATH中,因此在scripts字段中调用命令时不需要添加PATH,从而避免了NPM模块的全局安装。
如果npm run在没有任何参数的情况下直接运行,它将列出package.json中所有可执行的脚本命令
npm内置了两个命令缩写。npm测试相当于执行npm运行测试,npm启动相当于执行npm运行启动。
Npm运行创建一个Shell,执行指定的命令,并临时添加node_modules/。绑定到PATH变量,这意味着本地模块可以直接运行。
例如,您执行ESLint的安装命令。
$ npm i eslint - save-dev运行上述命令后,它将产生两个结果。首先,ESLint安装在当前目录的node_modules子目录中。其次是node_modules/。bin目录将生成一个符号链接node_modules/。bin/ESLint,指向ESLint模块的可执行脚本。
然后,您可以在package.json的script属性中引用不带路径的脚本eslint
{'name' :' test project ',' dev dependencies ' : { ' eslint ' : ' 1 . 10 . 3 ' },' scripts ' : { ' lint ' : ' eslint '}}请等到
如果直接运行npm run而不给出任何参数,将列出scripts属性下的所有命令。
$ NPM在用户服务包: lint js提示* *中运行可用脚本。js测试摩卡测试/这里,结束!以上就是本文的全部内容。希望对大家的学习有帮助,支持我们。
版权声明:谈node.js命令行工具是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。