1.概述

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

下面是一个最简单的package.json文件,只定义两项元数据:项目名称和项目版本。

{
"name" : "xxx",
"version" : "0.0.0",
}

package.json文件就是一个JSON对象,该对象的每一个成员就是当前项目的一项设置。比如name就是项目名称,version是版本(遵守“大版本.次要版本.小版本”的格式)。

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

 {
"name": "webapp",
"versuion":"1.0.0",
"private": true,
"scripts": {
"start": "roadhog server",
"build": "roadhog build",
"lint": "eslint --ext .js src test",
"http": "http-server dist -p 8000"
},
"engines": {
"install-node": "6.9.2"
},
"dependencies": {
"antd": "^3.0.0",
"aphrodite": "^1.2.5",
"axios": "^0.16.2",
"babel-polyfill": "^6.26.0",
"babel-runtime": "^6.9.2",
"classnames": "^2.2.5",
"console-polyfill": "^0.3.0",
"crypto-js": "^3.1.9-1",
"dva": "^2.1.0",
"dva-loading": "^1.0.0",
"echarts": "^3.8.5",
"echarts-for-react": "^2.0.0",
"global": "^4.3.2",
"jquery": "^3.2.1",
"json-server": "^0.12.1",
"keymaster": "^1.6.2",
"less-vars-to-js": "^1.2.0",
"mockjs": "^1.0.1-beta3",
"path-to-regexp": "^2.1.0",
"qs": "^6.5.1",
"rc-queue-anim": "^1.6.2",
"react": "^16.0.0",
"react-cookie": "^1.0.5",
"react-dom": "^16.0.0",
"socket.io-client": "^1.7.3",
"swiper": "^4.3.3"
},
"devDependencies": {
"babel-core": "^6.26.3",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.4",
"babel-plugin-dva-hmr": "^0.3.2",
"babel-plugin-import": "^1.4.0",
"babel-plugin-transform-runtime": "^6.9.0",
"babel-preset-react": "^6.24.1",
"eslint": "^3.12.2",
"eslint-config-airbnb": "^13.0.0",
"eslint-plugin-import": "^2.2.0",
"eslint-plugin-jsx-a11y": "^2.2.3",
"eslint-plugin-react": "^6.8.0",
"expect": "^1.20.2",
"husky": "^0.12.0",
"redbox-react": "^1.3.2",
"redux-logger": "^3.0.6",
"roadhog": "^1.4.1"
}
}

2.各个字段的含义。

1.private的含义

如果这个属性被设置为true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。如果你只想让模块被发布到一个特定的npm仓库,如一个内部的仓库,可与在下面的publishConfig中配置仓库参数。

2.scripts的含义

scripts属性是一个对象,里边指定了项目的生命周期个各个环节需要执行的命令。key是生命周期中的事件,value是要执行的命令。
具体的内容有 install start stop 等,详见https://docs.npmjs.com/misc/scripts

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

下面的设置指定了npm run startnpm run build等时,所要执行的命令。

  "scripts": {
"start": "roadhog server",
"build": "roadhog build",
"lint": "eslint --ext .js src test",
"http": "http-server dist -p 8000"
},

3.engines的含义

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

  "engines": {
"install-node": "6.9.2"
},

该字段也可以指定适用的npm版本。

 "engines" : { 

"npm" : "~1.0.20" 
}

4.dependencies的含义

dependencies字段指定了项目运行所依赖的模块,是一个对象,配置模块依赖的模块列表,key是模块名称,value是版本范围,版本范围是一个字符,可以被一个或多个空格分割。
dependencies也可以被指定为一个git地址或者一个压缩包地址。

 version 精确匹配版本
>version 必须大于某个版本
>=version 大于等于
<version 小于
<=versionversion 小于
~version "约等于",具体规则详见semver文档
^version "兼容版本"具体规则详见semver文档
1.2.x 仅一点二点几的版本
http://... 见下面url作为denpendencies的说明

注:不要把测试工具或transpilers写到dependencies中。

5.devDependencies的含义

devDependencies指定项目开发所需要的模块。

如果有人想要下载并使用你的模块,也许他们并不希望或需要下载一些你在开发过程中使用的额外的测试或者文档框架。
在这种情况下,最好的方法是把这些依赖添加到devDependencies属性的对象中。
这些模块会在npm link或者npm install的时候被安装,也可以像其他npm配置一样被管理,详见npm的config文档。
对于一些跨平台的构建任务,例如把CoffeeScript编译成JavaScript,就可以通过在package.json的script属性里边配置prepublish脚本来完成这个任务,然后需要依赖的coffee-script模块就写在devDependencies属性种。

  "devDependencies": {
"babel-core": "^6.26.3",
"babel-eslint": "^7.1.1",
"babel-loader": "^7.1.4",
"babel-plugin-dva-hmr": "^0.3.2",
"babel-plugin-import": "^1.4.0",
"babel-plugin-transform-runtime": "^6.9.0",
"babel-preset-react": "^6.24.1",
"eslint": "^3.12.2",
"redbox-react": "^1.3.2",
"redux-logger": "^3.0.6",
"roadhog": "^1.4.1"
}

注:

dependencies字段指定了项目运行所依赖的模块,devDependencies指定项目开发所需要的模块。

它们都指向一个对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。

$ npm install express --save
$ npm install express --save-dev 上面代码表示单独安装express模块,--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。

3.其他字段

6.peerDependencies的含义

有时候做一些插件开发,比如grunt等工具的插件,它们往往是在grunt的某个版本的基础上开发的,而在他们的代码中并不会出现require("grunt")这样的依赖,dependencies配置里边也不会写上grunt的依赖,为了说明此模块只能作为插件跑在宿主的某个版本范围下,可以配置peerDependencies:

  "peerDependencies": {
"tea": "2.x"
}

7.os

可以指定你的模块只能在哪个操作系统上跑:
"os" : [ "darwin", "linux" ]
也可以指定黑名单而不是白名单:
"os" : [ "!win32" ]
服务的操作系统是由process.platform来判断的,这个属性允许黑白名单同时存在,虽然没啥必要这样搞...

8.cpu

限制模块只能在某某cpu架构下运行
"cpu" : [ "x64", "ia32" ]
同样可以设置黑名单:
"cpu" : [ "!arm", "!mips" ]
cpu架构通过 process.arch 判断

9 DEFAULT VALUES

npm设置了一些默认参数,如:
"scripts": {"start": "node server.js"}
如果模块根目录下有一个server.js文件,那么npm start会默认运行这个文件。
"scripts":{"preinstall": "node-gyp rebuild"}
如果模块根目录下有binding.gyp, npm将默认用node-gyp来编译preinstall的脚本
"contributors": [...]
若模块根目录下有AUTHORS 文件,则npm会按Name (url)格式解析每一行的数据添加到contributors中,可以用#添加行注释

4.参考文档列表(https://docs.npmjs.com/)

package.json文件配置信息的更多相关文章

  1. package.json文件配置详解

    package.json 是npm init命令初始化后,在项目的根目录下自动生成的配置文件,它定义了这个项目的配置信息以及所需要的各种模块,npm install根据这个命令,自动下载所需的模块.p ...

  2. package.json的配置理解

    一.初步理解 1. npm安装package.json时  直接转到当前项目目录下用命令npm install 或npm install --save-dev安装即可,自动将package.json中 ...

  3. 初学Node(二)package.json文件

    package.json简介 package.json在Node项目中用于描述项目的一些基本信息,以及依赖的配置,一般每一个Node项目的根目录下都有一个package.json文件. 在项目的根目录 ...

  4. Nodejs package.json文件介绍

    每个npm的安装包里面都会包含一个package.json,通常这个文件会在包的根目录下. 这个文件很类似于.net项目中的.csproj+AssemblyInfo.cs+App.config文件,主 ...

  5. npm package.json文件解读

    每个Nodejs项目的根目录下面,一般都会有一个package.json文件.该文件可以由npm init生成,定义了项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据). pa ...

  6. Angular Npm Package.Json文件详解

    Angular7 Npm Package.Json文件详解   近期时间比较充裕,正好想了解下Angular Project相关内容.于是将Npm官网上关于Package.json的官方说明文档进行了 ...

  7. package.json文件内容介绍

    概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文件, ...

  8. node中 package.json 文件说明

    1.概述 每个项目的根目录下面,一般都有一个package.json文件,定义了这个项目所需要的各种模块,以及项目的配置信息(比如名称.版本.许可证等元数据).npm install命令根据这个配置文 ...

  9. package.json文件配置说明

    1.什么是package.json package.json文件是Node.js项目中的一个描述文件,执行npm init命令初始化项目后,在项目的根目录下自动生成该文件.package.json包含 ...

随机推荐

  1. 【转】http的keep-alive和tcp的keepalive区别

    http://blog.csdn.net/oceanperfect/article/details/51064574 1.HTTP Keep-Alive在http早期,每个http请求都要求打开一个t ...

  2. 09、高级编程之基于排序机制的wordcount程序

    package sparkcore.java; import java.util.Arrays; import java.util.Iterator; import org.apache.spark. ...

  3. gtest环境安装

    gtest全称Google Test,是Google的C++测试框架,有很多优秀的软件都会依赖这个环境编译或者在开发中也会用到,gtest的编译非常简单,下面简单说明一下安装过程. gtest git ...

  4. javascript 生成MD5加密

    进行HTTP网络通信的时候,调用API向服务器请求数据,有时为了防止API调用过程中被黑客恶意篡改,所请求参数需要进行MD5算法计算,得到摘要签名.服务端会根据请求参数,对签名进行验证,签名不合法的请 ...

  5. [Canvas]空战游戏进阶 增加爆炸管理类

    点此下载源码,欲观看效果请用Chrome打开index.html 图例: 源码: <!DOCTYPE html> <html lang="utf-8"> & ...

  6. notepad++使用收集

    一. 列编辑: 按住alt+鼠标纵向选中:alt+shift+箭头纵向或者横向选中. 列块编辑(编辑->列块编辑),实现跨步增加数字写入或者补0写入. 二. 多行变一行: 1.按Ctrl+F,弹 ...

  7. docker pureftpd

    pureftpd: image: vimagick/pure-ftpd ports: - "21:21" volumes: - ./data/ftpuser:/home/ftpus ...

  8. CentOS7本地安装MySQL5.7

    操作系统:3.10.0-514.el7.x86_64 安装包:mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz 1:检查是否安装了 libaio(centos7默认 ...

  9. C#反射实现 C# 反射 判断类的延伸类型 使用代码生成工具Database2Sharp快速生成工作流模块控制器和视图代码 C# ADO.NET的SqlDataReader对象,判断是否包含指定字段 页面中添加锚点的几种方式 .net 简单实用Log4net(多个日志配置文件) C# 常用小点

    C#反射实现   一.反射概念: 1.概念: 反射,通俗的讲就是我们在只知道一个对象的内部而不了解内部结构的情况下,通过反射这个技术可以使我们明确这个对象的内部实现. 在.NET中,反射是重要的机制, ...

  10. mac 使用笔记日志

    telnet安装 安装homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/i ...