## 隐式调用node执行程序 前面我们在执行`node`程序的时候都是使用`node filePath`(比如,`node index`)的形式。但是,对于命令行程序,像`npm,git`,你在命令行使用这些命令行程序时,前面不会再带一个执行程序名称,而我们在[命令行参数处理](313192)这一小节使用自定义命令参数时,需要使用形如`node index exec`的命令,这个过程很繁琐,这一小节将介绍如何简化这个过程。 1.创建一个`node`工程(创建文件夹,将工作目录切换到文件加,`npm init`生成`package.json`,创建`index.js`文件) 2.打开`index.js`文件,输入下面内容: ~~~ #!/usr/bin/env node console.log('Hello,world!'); ~~~ 我们在最前面加了`#!/usr/bin/env node`,它的作用是指定`index.js`的执行程序`node`,这时,你可以使用` ./index.js `直接执行`index.js`文件了。 3.虽然我们将第一个参数`node`去掉了,但是`index.js`这个文件名称太普遍了,并且,如果不在`index.js`的工作目录下,执行`index.js`的时候还要输入相对`index.js`的路径,这个过程很繁琐,我们需要更简单的方法。 下面介绍解决方案: 1)打开`package.json`文件,加入一个字段`bin`,如下: ~~~ "bin":{ "mymodule":"./index.js" }, ~~~ 这里`mymodule`你可以自定义,如果是准备发布的模块,一般会使用模块名称,如果是本地使用,你开心就好。 package.json完整文件如下: ~~~ { "name": "hello_module_outsider", "version": "1.0.0", "description": "My first node module", "main": "index.js", "bin":{ "mymodule":"./index.js" }, "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, "keywords": [ "hello", "module" ], "author": "outsider", "license": "ISC" } ~~~ 2)在当前工作目录下执行`npm link`,把模块链接的本地`npm`仓库 至此,我们可以完全使用 `mymodule`来替代`node index.js`了,而且,这个它是全局的,你可以在任何目录下使用。