欢迎来到我的公众号瑞谈获取我的最新文章:1.前言我们开发使用的一些库有自己独特的命令,比如webpack、babel、jest。通过在这些命令中输入不同的参数,可以获得相应的功能。通过本文,您将逐步了解如何编写在您的环境中运行的自定义命令。2.编写命令文件新建一个文件夹cmd,然后新建一个main.js文件,文件内容如下:#!/usr/bin/envnodeconsole.log('hellocommand');注意一定要有这行代码:#!/usr/bin/envnode,这行代码叫做shebang或hashbang,它会告诉操作系统在运行时使用node的解析器来解析文件。这时候如果想直接运行这个命令,会报错:需要给这个文件加上执行权限:chomd+xmain.js这样才能正常运行这个命令:接下来我们将使用npm的属性,为我们的命令命名。3、在cmd目录下使用npmcustom命令初始化npmnpminit,然后在生成的package.json文件中添加如下内容:"bin":{"mycmd":"main.js"},然后运行npmlink完成后可以直接输入mycmd命令得到结果。说到这里,你可能会疑惑为什么可以通过npmlink来实现自定义命令呢?接下来,我们来详细了解一下npmlink的运行机制。4.npmlink输入命令后,npm会帮助我们做如下工作,帮助我们在全局npm包环境中建立一个软链接,路径在{prefix}/lib/node_modules/。其中,前缀可以通过这个命令查询:npmgetprefix将配置文件中的bin链接到全局:{prefix}/bin/{name}看到这里你应该明白我们是用第二步来实现的定制订购。但是第一步中的命令是做什么的呢?npmlink第一步所做的工作,会给我们本地的开发工具库带来很大的帮助。当我们的工具库还没有完成的时候,我们不想发布到npm,而是想先在本地调试一下。这时候可以进入调试的目标项目,比如cmd-test文件夹,运行如下命令:npmlinkcmd其中cmd是我们的包名。运行这条命令后,npm会帮我们在cmd-test文件夹下的node_modules目录下创建一个cmd软链接。当然前提是cmd-test文件夹中已经有node_modules目录,否则会一直查找node_modules目录,直到根目录。您也可以手动创建一个。npmlinkcmd的效果与npminstallcmd完全一样。我们可以使用link中的所有函数,这对我们本地的调试工具库很有帮助。如果你想去掉这个软链接,只需要执行下面的命令:npmunlinkcmd说的有点远,然后回到自定义命令。如果我们想给命令传递参数怎么办?5.Commander我们可以使用工具commander来帮助我们获取process.argv传入的参数。使用方法也很简单:#!/usr/bin/envnode/***模块依赖。*/varprogram=require('commander');program.version('0.1.0').option('-p,--peppers','Addpeppers').option('-P,--pineapple','添加菠萝').option('-b,--bbq-sauce','添加烧烤酱').option('-c,--cheese[type]','添加指定类型的奶酪[marble]','marble').parse(process.argv);console.log('youorderedapizzawith:');if(program.peppers)console.log('-peppers');if(program.pineapple)console.log('-菠萝');if(program.bbqSauce)console.log('-bbq');console.log('-%scheese',program.cheese);通过option函数定义支持的参数,然后在使用的时候直接通过获取程序的属性获取传入的参数。具体使用请参考官方文档:commander6.总结本文介绍如何在Node开发环境中自定义自己的命令,完成一些日常的自动化工作。如果这些任务比较常见,也可以发布到npm,为更多人提高效率。