针对package.json的理解

1、什么是package.json?

package.json文件描述了一个NPM包的所有相关信息,包括作者、简介、包依赖、构建等信息。格式必须是严格的JSON格式。当我们创建一个前端项目时候,可以使用npm init命令,通过交互式的命令,自动生成一个package.json文件,里面包含了常用的一些字段信息。

下面是简单的package.json文件格式,仅仅定义了里两个元数据:名称和版本号

{

"name":"xxx",

"version":"0.1.0",

}

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

2、package.json具体配置说明

{

    "name": "gml",

    "title": "test01",

    "author": "2939292@qq.com",

    "version": "0.0.0",

    "homepage": "xxxxx",

    "repository": {

        "type": "git/svn",

        "url": "https://github.com/xxxxx"

    },

    "bugs": "https://github.com/xxxxx",

    "devDependencies": {

        "grunt": "~0.4.5",

        "grunt-contrib-less": "~0.11.4",

        "grunt-contrib-watch": "~0.6.1",

        "grunt-banner": "~0.2.3",

        "grunt-contrib-uglify": "~0.5.1"

    },

    "scripts": {

        "preview": "cd _site; python -m SimpleHTTPServer 8020",

        "py3view": "cd _site; python3 -m http.server 8020",

        "watch"  : "grunt watch & npm run preview & jekyll serve -w",

        "py3wa"  : "grunt watch & npm run py3view & jekyll serve -w",

        "boil"  : "git push boilerplate boilerplate:master",

        "push"  : "git push origin master --tag",

        "cafe"  : "git co gitcafe-pages; git merge master; git push gitcafe gitcafe-pages:gitcafe-pages --tag; git co master;"

    }

}

必须字段

1.Name

项目名称

全部小写,没有空格,可以使用下划线或者横线

2.Version

项目版本号

x.x.x 的格式

符合“语义化版本规则”

可选字段

1.title

标题

2.author

"author": "gml <29392923829@qq.com>",

3.homepage

项目url主页

4.repository

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

"repository": {

        "type": "git/svn",

        "url": "https://github.com/choerodon/choerodon.git"

    }

6.devDependencies

指定项目开发所需要的模块,如果只需要下载使用某些模块,而不下载这些模块的测试和文档框架,放在这个下面比较不错。

"devDependencies": {

"eslint":"^5.15.1",

"eslint-config-airbnb":"^17.1.0",

"eslint-plugin-babel":"^5.3.0",

"eslint-plugin-import":"^2.17.2",

"eslint-plugin-jsx-a11y":"^6.2.1",

"eslint-plugin-react":"^7.13.0",

"lint-staged":"^8.1.7"

    }

7.scripts

object

Key是生命周期事件名,value是在事件点要跑的命令。参考npm-scripts。

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

"scripts": {

"dev":"rimraf .cache && npm start",

"start":"yqcloud-front-boot start --config ../config.js",

"build":"yqcloud-front-boot build --config ../config.js",

"lint":"npm run lint:es && npm run lint:style",

"lint:es":"eslint src/**/*.{js,jsx} ../config.js",

"lint:style":"stylelint src/**/*.scss --syntax scss",

"lint-staged":"lint-staged",

"lint-staged:es":"eslint",

"eslint":"npm run eslint:fix",

"eslint:fix":"eslint --fix 'src/**/*.js*'"

},

其它字段

1.Dependencies

指示当前包所依赖的其他包。

{ "dependencies" :

  { "foo" : "1.0.0 - 2.9999.9999"

  , "bar" : ">=1.0.2 <2.1.2"

  , "baz" : ">1.0.2 <=2.3.4"

  , "boo" : "2.0.1"

  , "qux" : "<1.0.0 || >=2.3.1 <2.4.5 || >=2.5.2 <3.0.0"

  , "asd" : "http://asdf.com/asdf.tar.gz"

  , "til" : "~1.2"

  , "elf" : "~1.2.3"

  , "two" : "2.x"

  , "thr" : "3.3.x"

  }

}

版本格式可以是下面任一种:

* ersion 完全匹配

* >version 大于这个版本

* >=version大于或等于这个版本

* <version

* <=version

* ~version 非常接近这个版本

* ^version 与当前版本兼容

* 1.2.x X代表任意数字,因此1.2.1, 1.2.3等都可以

* http://... Unix系统下使用的tarball的URL。

* * 任何版本都可以

* ""任何版本都可以

* version1 - version2  等价于 >=version1 <=version2.

* range1 || range2 满足任意一个即可

* git... Git地址

* user/repo

2.License

授权方式,如果是使用一个普遍的license,比如BSD-3-Clause或MIT,直接使用:

{ "license" : "(ISC OR GPL-3.0)" }/{ "license" : "BSD-3-Clause" }/{ "license" : "SEE LICENSE IN <filename>" }

如果您不希望以任何条款授予他人使用私有或未发布软件包的权利:

{ "license": "UNLICENSED" }

3.main

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

4.Config

object

Config对象中的值在Scripts的整个周期中皆可用,专门用于给Scripts提供配置参数。

5.Keywords

字符串数组。人们使用 npm search 搜索时发现你的项目

6.Description

必须是字符串。npm search的时候会用到。

7.Bin

bin项用来指定各个内部命令对应的可执行文件的位置。很多的包都会有执行文件需要安装到PATH中去。

这个字段对应的是一个Map,每个元素对应一个{ 命令名:文件名 }。

{ "bin" : { "npm" : "./cli.js" } }

8.Engines

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

既可以指定node版本:

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

也可以指定npm版本:

{ "engines" : {"npm" : "~1.0.20" } }

以上只是总结一部分以及常用的字段,详细信息鉴于npm官网:http://caibaojian.com/npm/

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

推荐阅读更多精彩内容