package.json文件

1.概述

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

生成package.json文件

package.json文件可以手工编写,也可以使用npm init命令自动生成。这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。注:如果你一路按回车确认感觉有些麻烦,你可以直接加一个-y参数,这样npm就直接给我们生成了,即npm init -y有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。

如果一个模块不在package.json文件之中,可以单独安装这个模块,并使用相应的参数,将其写入package.json文件之中。

$ npm install express --save
$ npm install express --save-dev

package.json里面不能有注释,有会报错

2.name

package.json中最重要的属性是name和version两个属性,这两个属性是必须要有的,否则模块就无法install,这两个属性一起形成了一个npm模块的唯一标识符。模块中内容变更的同时,模块版本也应该一起变化。

name属性就是你的模块名称

3.version

项目版本

4.description

一个描述,方便别人了解你的模块作用,搜索(npm search)的时候也有用,格式为字符串

5.keywords

关键字。方便使用者在 npm search中搜索。格式为字符串

6.scripts字段

npm 允许在package.json文件里面,使用scripts字段定义脚本命令。

{
  // ...
  "scripts": {
    "build": "node build.js",
    "preinstall": "echo here it comes!"
  }
}

上面代码build命令对应的脚本是node build.js。

命令行下使用npm run命令,就可以执行这段脚本

$ npm run build
# 等同于执行
$ node build.js

这些定义在package.json的命令(scripts)就称为 npm 脚本。它的优点很多。

1.npm 提供的很多辅助功能。

2.用户不需要知道怎么测试你的项目,只要运行npm run test即可。

查看当前项目的所有 npm 脚本命令,可以使用的npm run命令。

$ npm run

7.dependencies字段

dependencies字段指定了项目运行所依赖的模块,格式为对象。该对象的各个成员,分别由模块名和对应的版本要求组成,表示依赖的模块及其版本范围。

"deependencies": {
    "browserify": "~13.0.0",
    "karma-browserify": "~5.0.1"
}

版本格式如下:

1.指定版本:比如1.2.2,遵循“大版本.次要版本.小版本”的格式规定,安装时只安装指定版本。

2.波浪号(~)+指定版本:比如~1.2.2,表示安装1.2.x的最新版本(不低于1.2.2),但是不安装1.3.x,也就是说安装时不改变大版本号和次要版本号

3.插入号(^)+指定版本:比如^1.2.2,表示安装1.x.x的最新版本(不低于1.2.2),但是不安装2.x.x,也就是说安装时不改变大版本号。需要注意的是,如果大版本号为0,则插入号的行为与波浪号相同,这是因为此时处于开发阶段,即使是次要版本号变动,也可能带来程序的不兼容。

4.latest:安装最新版本。

默认在版本发布上,一个版本有三部分:X, Y, Z,分别指代大版本,小版本,与查缺补漏版本。比如1.2.3,那么就是大版本1,小版本2,bugfix版本3。bugfix版本不会影响任何功能,小版本变更往往是增加新功能,也不会影响使用。而大版本变更往往会带来使用层面不兼容的情况。

8.devDependencies字段

devDependencies指定项目开发所需要的模块,格式为对象。该对象的各个成员和dependencies字段的相同。

9.安装dependencies字段和dependencies字段

package.json文件可以手工编写,也可以使用npm init命令自动生成。

$ npm init

这个命令采用互动方式,要求用户回答一些问题,然后在当前目录生成一个基本的package.json文件。所有问题之中,只有项目名称(name)和项目版本(version)是必填的,其他都是选填的。

有了package.json文件,直接使用npm install命令,就会在当前目录中安装所需要的模块。

$ npm install

如果一个模块不在package.json文件之中,可以使用相应的参数,单独安装这个模块,安装后会自动写入package.json文件之中。

--save参数表示将该模块写入dependencies属性,--save-dev表示将该模块写入devDependencies属性。

$ npm install express --save
$ npm install express --save-dev

上面代码表示单独安装express模块。

注意:dependencies可以叫做线上依赖,devDependencies叫做开发依赖,区别举个例子来说,使用webpack开发一个vue项目,需要依赖vue,以及一些编译过程中的需要的sass插件等,开发完打包时,vue属于线上依赖,sass插件属于开发依赖,打包时候nodejs会根据--save还是--save-dev来判断,线上依赖会一起打包到项目里面,开发依赖不会打包。

10.engines 字段

指明了该项目所需要的node.js版本。也可以指定适用的npm版本

 "engines": {
    "node": ">= 4.0.0",
    "npm": ">= 3.0.0"
  },

11.Repository字段

用于指示源代码存放的位置

"repository" :{
   "type" : "git",
   "url" : "http://github.com/npm/npm.git"
 }
 
"repository" :{
   "type" : "svn",
   "url" : "http://v8.googlecode.com/svn/trunk/"
 }

12.browserslist

众所周知为兼容所有浏览器,有的CSS属性需要对不同的浏览器加上前缀。

Autoprefixer使用Browserlist来确定哪些浏览器版本将得到支持从而添加前缀。格式为数组。

 "browserslist": [
    "> 1%", //全球有超过1%的人使用的浏览器
    "last 2 versions", //根据CanIUse.com追踪的最后两个版本的所有浏览器
    "not ie <= 8" // 不支持ie8及以下
  ]

13.private

设为true这个包将不会发布到NPM平台下。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容