伙计,给我来一杯package.json!不加糖
前言:夜深了,我熬了一锅热气腾腾的 package.json,给大家端上来,希望大家喜欢
json 和 JS 对象的区别
package.json,顾名思义,它是一个 json 文件,而不能写入 JS 对象。
所以我们首先要搞懂的是 JSON 和 JS 对象的区别:
(图源:找到的都是被爬虫爬的文章,实在找不到原作者。。)
【注意】 在 JSON 中属性名一定要加上双引号
name 字段
name 字段的限制
1.name 字段必须小于 214 字符(这个没什么好记的~)
2.name 字段不能包含有 "." 符号和下划线(这个要记一下哦~)
3.name 字段不能包含有大写字母(这个要记一下哦~)
4.name 字段不能含有非 URL 安全的字符,因为它将当发布的时候,它将作为你的包的相关信息被写入 URL 中
那么,有哪些算是非 URL 安全的字符呢?咱们看表说话:
(图源:《URL 中的保留和不安全字符》——tianya23)
【注意】:
1. 我唯一觉得需要特别注意的是,name 字段不能含有大写字母和下划线,因为对写 JS 的人来说,因为驼峰命名法的习惯往往试图加个大写字母进去;而对于写 node 的人来说,又可能忍不住想在单词与单词间连个下划线,这都是错误的来源,要谨记。
2.package.json 的 name 字段似乎格外地喜欢 "-" 这个符号呢,所以我们在写 name 字段时可以用它做连接符号哦,例如:像 "react-router" 这个字段一样
version 字段
npm 对 version 定义的规则要求
对于 "version":"x.y.z"
1. 修复 bug, 小改动,增加 z
2. 增加了新特性,但仍能向后兼容,增加 y
3. 有很大的改动,无法向后兼容, 增加 x
例如:我原本的项目是 1.0.0 版本的话
若是 1 中情况,变为 1.0.1
若是 2 中情况,变为 1.1.0
若是 3 中情况,变为 2.0.0
npm 有自己的检验 version 的模块——node-semver
npm 有自己的一套检验 version 正确性的模块,它叫做 node-semver,是一开始就跟随着 npm 一起被打包安装的。当然了,你也可以通过自己安装去在自己的项目中使用它。
使用的例子像这样:
先 npm install --save semver
然后:
- const semver = require('semver')
- semver.valid('1.2.3')// '1.2.3'semver.valid('a.b.c')// null
【吐槽】:怎么感觉好像没什么大用哪,不过官方文档上这样写我也只好这样翻译过来了。详细资料左转:https://github.com/npm/node-semver
name 字段和 version 字段可以说是 package.json 最重要也是最基本的两个字段了。它们共同构成了你的包的唯一标识
keywords 和 description 字段
字段要求:
description:字符串
keywords:字符串数组
简单地说,这两个东东是 npm 搜索系统中的搜索条件,所以。如果你试图发布的是一个开源插件,那么这两个字段你应该重视
license 字段
这是你指定的项目的许可证,它告诉他人他们是否有权利使用你的包,以及,在使用你的包的时候他们应该受到怎样的限制
咱们还是上一张图吧:
图源:《如何选择开源许可证?》——阮一峰
字段要求:
单个 license:直接写入名称
- {
- "license": "BSD-3-Clause"
- }
多个 license:在一对圆括号内写入 license 名称,且在多个 license 内用 AND 等连接
- {
- "license": "(ISC AND GPL-3.0)"
- }
更多 license 字段的语法规则请右转: SPDX license 表达式的语法规则 2.0 版本 https://www.npmjs.com/package/spdx
author 字段
要求:一个字符串或是一个对象。
如果是一个对象,该对象包含三个属性:
name 属性 (必填)
email 属性(选填)
URL 属性(选填)
- {
- "name": "Barney Rubble",
- "email": "b@rubble.com",
- "url": "http://barnyrubble.tumblr.com/"
- }
main 字段
这个是你项目的入口文件。简而言之,当别人安装了你发布的模块时,require 你的模块的时候取得的就是你 main 字段规定的入口文件的输出。
例如你写入了 {"main":"XXX.js"},而他人通过 npm install '你的模块名称' . 安装了你的模块后,他通过 var X = require('你的模块名称') 取得的就是你在 XXX.js 的输出
script 字段
写进 scripts 的命令 (command), 可以通过 npm run <command> 或者 npm <command> 运行对应的 shell 指令,例如:{"scripts": {"start": "node main.js"} } 可以让你在终端输入 npm start 的时候,等同于运行了 node main.js
什么时候要加 "run", 什么时候可以不用加 "run" 呢?
一个让我们可能有些困扰的问题是,通过 script 字段内的 npm 命令运行脚本时,有时候要加 "run",有时候又不要加 "run", 即有时候是可以直接用 npm <command>;而有时候又要用 npm run <command> 才能运行脚本,这该如何区分呢?
首先要提一下的是,run 的原名是 run-script,是一段脚本,而 run 是它的一个别名(alias)
1. 当 run[-script] 被 test, start, restart, and stop 这四个自带的命令所使用时,它可以被省略(或者说不需要加 "run" 就可以直接调用),所以我们平时最常输入的 npm install 实际上相当于 npm run install,只不过是为了方便省略了 run 而已
来源: http://www.cnblogs.com/penghuwan/p/7134046.html