main
main字段是一个模块ID(module ID),是你的程序的主入口(primary entry point)。也就是,如果你的包被命名为foo,并且一个用户安装了它,然后使用“require("foo")”,你的主模块的exports对象会被返回。
这应该是一个和你的包文件夹的根目录相关的模块ID。
对于大多数模块,有一个主要脚本(main script)并且没有太多其他东西是很有意义的。
bin
很多包有一个或多个想要安装到PATH中的可执行文件。npm使得这种需求变得很简单。(事实上,它使用这个特性来安装"npm"可执行程序)
要使用它的话,在你的package.json中提供bin字段,它会映射命令名到本地文件名。在安装中,对于全局安装,npm会将文件符号链接(symlink)到prefix/bin,或者对于本地安装,符号链接到./node_modules/.bin。
比如,应用myapp中有:
{ "bin" : { "myapp" : "./cli.js" } }
那么,当你安装myapp,它会创建一个符号链接,从cli.js脚本到/usr/local/bin/myapp。
如果你有一个可执行程序,并且它的名字就是包名的话,你可以把它作为字符串来提供。比如:
{ "name": "my-program"
, "version": "1.2.5"
, "bin": "./path/to/program" }
和这个是一样的:
{ "name": "my-program"
, "version": "1.2.5"
, "bin" : { "my-program" : "./path/to/program" } }
请确保你的在bin中的文件以#!/usr/bin/env node开始,否则脚本在没有可执行节点的情况下启动(otherwise the scripts are started without the node executable)!