package.json文件概述

package.json 是一个JSON对象,每个项目的根目录下面都有这个,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称,版本,许可证等元数据)。npm install 命令根据这个配置文件,自动下载所需的模块,也就是配置项目所需的运行和开发环境。

下面是一个更完整的package.json文件

{
  "name": "Hello World",
  "version": "0.0.1",
  "author": "张三",
  "description": "第一个node.js程序",
  "keywords":["node.js","javascript"],
  "repository": {
    "type": "git",
    "url": "https://path/to/url"
  },
  "license":"MIT",
  "engines": {"node": "0.10.x"},
  "bugs":{"url":"http://path/to/bug","email":"bug@example.com"},
  "contributors":[{"name":"李四","email":"lisi@example.com"}],
  "scripts": {
    "start": "node index.js"
  },
  "dependencies": {
    "express": "latest",
    "mongoose": "~3.8.3",
    "handlebars-runtime": "~1.0.12",
    "express3-handlebars": "~0.5.0",
    "MD5": "~1.2.0"
  },
  "devDependencies": {
    "bower": "~1.2.8",
    "grunt": "~0.4.1",
    "grunt-contrib-concat": "~0.3.0",
    "grunt-contrib-jshint": "~0.7.2",
    "grunt-contrib-uglify": "~0.2.7",
    "grunt-contrib-clean": "~0.5.0",
    "browserify": "2.36.1",
    "grunt-browserify": "~1.3.0",
  }
}

接下来,详细解释 package.json文件的各个字段

(1) scripts 字段

scripts 指定了运行脚本命令的npm命令行缩写,比如start指定了运行 npm run start 时,所要执行的命令

下面的设置,指定了 npm run preinstall、npm run postinstall时,所要执行的命令

 "scripts": {
     "preinstall": 'echo here it comes',
     "postinstall": 'echo there it goes'
 }

(2) dependencies字段、devDependencies字段

dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发时所需要的模块。
它们都指向一个对象,该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围

(3) 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模块

(4) bin字段

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

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

上面代码指定,someTool命令对应的可执行文件为 bin 子目录下的 someTools.js。Npm会寻找这个文件,在 node_modules/.bin/目录下建立符号链接

(5) main字段

main字段指定了加载的入口文件,require('moduleName')就会加载这个文件,这个字段的默认值是模块根目录下面的index.js

(6) config字段

用于添加命令行的环境变量

(7) 其他

7.1 browser字段
browser 指定该模板供浏览器使用的版本。Browserify这样的浏览器打包工具,通过它就知道该打包哪个文件。
"browser": {
    "tipso": './node_modules/tips/src/tipso.js'
}
####7.2 engines字段
engines 字段指明了该模块运行的平台,比如 Node 的某个版本或者浏览器
{
   "engines": {
        "node" : ">=0.10.3 <0.12"
   }
}
该字段也可以指定适用的 npm 版本
{
   "engines": {
        "npm": '~1.0.20'
   }
}

7.3 man字段
man字段用来指定当前模块的man文档的位置
"man": [ "./doc/calc.1" ]
7.4 preferGlobal
是个布尔值,表示当用户不将该模块安装为全局模块时(即不用-global参数),要不要显示警告,表示该模块的本意就是安装为全局模块。
7.5 style字段
style指定供浏览器使用时,样式文件所在的位置。样式文件打包工具parcelify,通过它知道样式文件的打包位置。

    "style": [
        "./node_modules/tipso/src/tipso.css"
    ]
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。