package.json字段解释

来源:互联网 发布:淘宝离开时自动回复 编辑:程序博客网 时间:2024/04/20 09:14

package.json

通过 npm init 来初始化一个项目,会生成一个package.json文件
package.json通过json格式来组织数据。
最简单的package.json如下:
{
“name”: “sunyang”,
“version”: “1.0.0”
}
name和version为必须的字段。顾名思义,name为项目名,version为版本号。在npm init初始化的时候可以对其进行赋值。

name

  • name里不要包含“js”和“node”,因为默认NPM包就是node.js。
  • 不能以.和_开头。名字将会被作为url的一部分,所以要符合一般url命名规则
  • 名字会被作为require()的参数,所以名字要尽量简明。
  • 如果包要发布到NPM平台,最好检查下是否重名,字母要求小写。

version

http://semver.org/

description

包的描述信息,会在npm serch的返回结果中显示,以帮助用户选择合适的包。

keywords

包的描述信息关键字,会在npm serch的返回结果中显示,以帮助用户选择合适的包。

main

包的入口文件 .js

bin

bin项用来指定各个内部命令对应的可执行文件的位置。

"bin": {  "someTool": "./bin/someTool.js"}

上面代码指定,someTool 命令对应的可执行文件为 bin 子目录下的 someTool.js。Npm会寻找这个文件,在node_modules/.bin/目录下建立符号链接。在上面的例子中,someTool.js会建立符号链接npm_modules/.bin/someTool。由于node_modules/.bin/目录会在运行时加入系统的PATH变量,因此在运行npm时,就可以不带路径,直接通过命令来调用这些脚本。

因此,像下面这样的写法可以采用简写。

scripts: {    start: './node_modules/someTool/someTool.js build'}// 简写为scripts: {    start: 'someTool build'}

scripts

指定了运行脚本命令的npm run+命令的命令行缩写
“scripts”:{
“perinstall”:”echo here it comes!”,
“start”: “node ./bin/start”,
“test”:”node ./bin/test”
}
如果有依赖,通常这里的命令会用到依赖的模块。

dependencies字段,devDependencies字段

devDependencies是开发环境里需要的依赖,比如单元测试。devDependencies 通常用来放我们开发时所用到的工具,比如 Webpack,Gulp,babel等等,在生产环境中是不需要的。
如需安装devDependencies,执行:

npm install packagename --dev  

dependencies是生产环节里的依赖。
通过“npm install packagename”进行安装,只会安装dependencies

npm install packagename

就是说,如果NODE_ENV=production,那就会忽略devDependencies字段,如果NODE_ENV=development,则dependencies和devDependencies同时有效。

指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。
波浪号(tilde)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号。
插入号(caret)+指定版本:比如ˆ1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。
latest:安装最新版本。

peerDependencies

你的项目和所依赖的模块,都会同时依赖另一个模块,但是所依赖的版本不一样。比如,你的项目依赖A模块和B模块的1.0版,而A模块本身又依赖B模块的2.0版。

大多数情况下,这不构成问题,B模块的两个版本可以并存,同时运行。但是,有一种情况,会出现问题,就是这种依赖关系将暴露给用户。

最典型的场景就是插件,比如A模块是B模块的插件。用户安装的B模块是1.0版本,但是A插件只能和2.0版本的B模块一起使用。这时,用户要是将1.0版本的B的实例传给A,就会出现问题。因此,需要一种机制,在模板安装的时候提醒用户,如果A和B一起安装,那么B必须是2.0模块。

peerDependencies字段,就是用来供插件指定其所需要的主工具的版本。

{  "name": "chai-as-promised",  "peerDependencies": {    "chai": "1.x"  }}

上面代码指定,安装chai-as-promised模块时,主程序chai必须一起安装,而且chai的版本必须是1.x。如果你的项目指定的依赖是chai的2.0版本,就会报错。

注意,从npm 3.0版开始,peerDependencies不再会默认安装了。

optionalDependencies

如果一个依赖项可用,但希望在这个依赖项无法被找到或者安装时失败npm还能继续处理(不中断),那么你可以把它放在optionalDependencies中。和dependencies一样,optionalDependencies是一个包名和版本号或url的映射。区别在于optionalDependencies中的依赖构建失败时不会导致npm整体安装失败。
但在程序依中要对缺失的依赖做处理,比如这样:

try{    varfoo=require('foo')varfooVersion=require('foo/package.json').version}catch(er){    foo=null}if(notGoodFooVersion(fooVersion)){    foo=null}//..thenlaterinyourprogram..if(foo){    foo.doFooThings()}

optionalDependencies中的项会覆盖dependencies中的同名项,所以一个特定名字的项最好只出现在一个地方。

author

包的作者,可以使字符串,可以是json对象。

author:"sunyang"

author:{    name:"sunyang",    blog:"http://blog.csdn.net/bless2015"}

contributors(贡献者),maintainers(维护者)

同author,可以是json数组

homepageg和bugs

模块的github地址和issues地址。

repository

指明你的代码被托管在何处,这对那些想要参与到这个项目中的人来说很有帮助。如果git仓库在github上,用npm docs命令将会找到你。比如我的github主页…

{    "repository": {        "type": "git",        "url": "https://github.com/3xCode/"    }}

config

系统全局变量,以json形式保存信息。
config里的变量可以在其他js里直接用。通常用来保存常量,比如ip、port。

其它

license

许可

browser

browser指定该模板供浏览器使用的版本。Browserify这样的浏览器打包工具,通过它就知道该打包那个文件。

"browser": {  "tipso": "./node_modules/tipso/src/tipso.js"},

engines

engines字段指明了该模块运行的平台,比如 Node 的某个版本或者浏览器。

{ "engines" : { "node" : ">=0.10.3 <0.12" } }

os

你可以指定你的模块要运行在哪些操作系统中:

"os" : [ "darwin", "linux" ]

或者模块不允许运行在哪些操作系统:

"os" : [ "!win32" ]

preferGlobal

如果你的包是个命令行应用程序,需要全局安装,就可以设为true。

directories

告诉别人你的目录结构,包含

directories.lib

告诉你库文件夹的位置,目前没有什么地方需要用到lib文件夹,但是这是重要的元信息。

directories.bin

如果你在directories.bin中指定一个bin目录,在这个目录中的所有文件都会被当做在bin来使用。

由于bin指令的工作方式,同时指定一个bin路径和设置directories.bin将是一个错误。如果你想指定独立的文件,使用bin,如果想执行某个文件夹里的所有文件,使用directories.bin。

directories.man

directories.man指定的文件夹里都是man文件,系统通过遍历这个文件夹来生成一个man的数组。

directories.doc

把markdown文件放在这。也许某一天这些文件将被漂亮地展示出来,不过这仅仅是也许。

directories.example

把示例脚本放在这。也许某一天会被用到。

files

“files”属性的值是一个数组,内容是模块下文件名或者文件夹名,如果是文件夹名,则文件夹下所有的文件也会被包含进来(除非文件被另一些配置排除了)
某些文件总是被包含的

package.json
README (and its variants)
CHANGELOG (and its variants)
LICENSE / LICENCE

某些文件总是被忽略的

.git
CVS
.svn
.hg
.lock-wscript
.wafpickle-N
*.swp
.DS_Store
._*
npm-debug.log

有两个没有查到什么意思dist,和gitHead,

example:

  "dist": {    "shasum": "b2a446b16a9db87ed3c622ba9beb1b085b1234a7",    "tarball": "https://registry.npmjs.org/http-server/-/http-server-0.10.0.tgz"  },  "gitHead": "a2003c1d37ea049c788d2ab3d0c7d64ea97e88da"

npm-config
Node.js v8.5.0 Documentation
What’s the difference between dependencies, devDependencies and peerDependencies in npm package.json file?
package.json详解

原创粉丝点击