欢迎关注个人公众号睿Talk
,获取我最新的文章:javascript
咱们开发用到的一些库都有本身特有的命令,如webpack,babel和jest等。经过给这些命令输入不一样的参数,能够获得相应的功能。经过篇文章,你将学会如何一步步地编写运行在弄的环境的自定义命令。java
新建一个文件夹cmd,而后建一个main.js文件,文件内容以下:node
#!/usr/bin/env node console.log('hello command');
注意必定要有这行代码:#!/usr/bin/env node
,这行代码叫shebang
或者hashbang
,它会告诉操做系统在运行这个文件文件的时候,须要用node的解析器来解析。webpack
这时候若是想直接运行这个命令,将会获得一个报错:git
须要给这个文件添加一个执行的权限:github
chomd +x main.js
这样就能正常的运行这一命令了:web
下一步,咱们将借助npm的特性,来给咱们的命令命名。npm
先在cmd目录初始化npmjson
npm init
而后在生成的package.json文件中添加如下内容:segmentfault
"bin":{ "mycmd": "main.js" },
而后再运行
npm link
完成后就能够直接输入mycmd命令获得结果了
此时你可能会感到疑惑,为何经过npm link就能实现自定义命令呢?下面咱们再详细了解npm link的运做机制。
输入命令后,npm帮咱们作了如下这些工做
npm get prefix
看到这里,你应该了解咱们正是借助第二步,实现自定义命令的。但第一步的命令又有什么做用呢?
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
说得有点远了,再扯回到自定义命令上面来。若是咱们但愿给命令传入参数,该如何作呢?
咱们能够借助commander这个工具,帮咱们获取到从process.argv
里面传进来的参数,使用方法也很简单:
#!/usr/bin/env node /** * Module dependencies. */ var program = require('commander'); program .version('0.1.0') .option('-p, --peppers', 'Add peppers') .option('-P, --pineapple', 'Add pineapple') .option('-b, --bbq-sauce', 'Add bbq sauce') .option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble') .parse(process.argv); console.log('you ordered a pizza with:'); if (program.peppers) console.log(' - peppers'); if (program.pineapple) console.log(' - pineapple'); if (program.bbqSauce) console.log(' - bbq'); console.log(' - %s cheese', program.cheese);
经过option这个函数来定义支持的参数,而后在使用的时候直接经过获取program的属性拿到传进来的参数。具体用法请看官方文档:commander
本文介绍了如何在 Node 开发环境下定制本身的命令,完成一些平常的自动化任务。若是这些任务比较通用,还能够发布到 npm,为更多的人提高效率。