一、创建 package.json
输入如下命令之后,会要求填写基本的配置信息,这里,我们选择一路回车即可,待生成 package.json 文件之后,再来配置。

npm init

二、配置 package.json

{
// 包的名称
"name": "sg-utils",
// 包的版本号
"version": "1.4.6",
// 包的描述
"description": "javascript通用工具类",
// 包的入口文件
"main": "index.js",
// 上传npm的白名单,即被允许上传的文件
"files": [
"src",
"demo",
"index.js"
],
// 指定了运行脚本命令的npm命令行缩写
"scripts": {
"start": "node server.js"
},
// 远程代码仓库
"repository": {
"type": "git",
"url": "https://github.com/shiguang0116/sg-utils"
},
// 关键字
"keywords": [
"javascript",
"util"
],
// 作者
"author": "guang.shi",
// 许可证数组
"license": "ISC",
// 提交bug的地址
"bugs": {
"url": "https://github.com/shiguang0116/sg-utils/issues"
},
// 包的主页
"homepage": "https://github.com/shiguang0116/sg-utils#readme",
// 运行引擎,指明node.js运行所需要的版本
"engines": {
"node": ">= 6.0.0",
"npm": ">= 3.0.0"
},
// 开发环境的依赖包列表
"devDependencies": {
"eslint": "^5.16.0",
"eslint-config-vui": "^0.2.7",
"eslint-plugin-html": "^5.0.5"
},
// 生产环境的依赖包列表
"dependencies": {},
// 依赖包列表
"peerDependencies": {}
}

.

三、devDependencies、dependencies、peerDependencies的区别
1、devDependencies和dependencies

  • devDependencies是只会在开发环境下依赖的模块,生产环境不会被打入包内。安装时,加上--save-dev
  • dependencies依赖的包不仅开发环境能使用,生产环境也能使用。安装时,加上--save

2、peerDependencies的作用

  • peerDependencies是用来发布npm插件时指定所需要兼容的宿主包的版本。比如以下场景:
  • 我们开发webpack-plugin-a@1.0.0的时候是针对webpack@2.0.0来开发的;
  • webpack发布了最新的webpack@3.0.0并且做了不兼容升级,导致webpack-plugin-a@1.0.0已经不能在该版本使用;
  • 有不明真相的开发者,安装了webpack@3.0.0和我们的webpack-plugin-a@1.0.0;
  • 由于webpack版本不兼容,当该开发者执行编译的时候肯定是要报错的。那么如何避免这种问题的发生呢?这就需要在webpack-plugin-a@1.0.0的package.json中添加如下配置:
"peerDependencies": {
"webpack": "^2.0.0"
}
  • 这样就指定了webpack-plugin-a@1.0.0只兼容webpack@2.x.x,当用户同时安装webpack@3.0.0和webpack-plugin-a@1.0.0的时候就会抛出:

    UNMET PEER DEPENDENCY webpack@3.0.
    npm WARN webpack-plugin-a@1.0. requires a peer of webpack@^2.0. but none was installed

以上提示,足够让开发者认识到当前所存在的风险了,该特性添加于Node.js 0.8.19(npm 1.2.10)版本。
.

四、版本符号说明

  • 如果对“语义化版本号变更”不了解的,可以参考文章:https://blog.csdn.net/guang_s/article/details/84991304
  • ^ 是npm默认的版本符号。 例如:npm install --save sg-utils 会在 package.json 中添加 “sg-utils”: “^1.4.6”。这个符号会告诉npm可以安装 1.4.6 或者一个大于它的版本, 但是要是主版本 1 以下的版本;
  • ~ 符号表示可以安装 1.4.6 或者一个大于它的版本, 但是要是次版本号 1.3以下的版本;
  • > 符号用来指定可以安装的 beta 版本;
  • 可以通过 npm config set save-prefix='' 来设置默认符号。

.

五、package-lock.json的作用
npm更新到v5.x.x以后,会出现一种新的自动生成文件 package-lock.json,如果打开这个文件,会发现它看着像 package.json 里面的依赖。那么,它究竟是做什么用的呢?

1、背景介绍

  • 比如我们的项目用了 sg-utils ,npm install sg-utils --save-dev,我们本地使用的版本是 ^1.4.6,这时 package.json 记录的版本号也是 ^1.4.6;
  • 当有人从 github 上拉取我们的代码,然后初始化项目(或者我们自己有一天也可能再次安装依赖)npm install。这个时候,项目安装的 sg-utils 就是 在主版本 1 以下的最新版本 (比如更新到了 1.4.7,两个版本之前修改了一个bug),那么本地安装的就是 1.4.7;
  • 那么,就会存在多人开发项目,但是本地的依赖版本不一样的情况。虽然只是修改了一个 bug,但仍然有可能影响代码的开发。

2、package-lock.json 版本锁定

  • 当我们安装依赖时,package-lock.json 文件会自动生成。里面会描述上一次更改后的确切的依赖管理树,包含了唯一的版本号和相关的包信息。之后的 npm install 会根据 package-lock.json 文件进行安装,保证不同环境、不同时间下的依赖是一样的;
  • 由于 package-lock.json 文件中记录了下载源地址,可以加快我们的 npm install 速度。

————————————————
版权声明:本文为CSDN博主「猿始森林」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/guang_s/article/details/90376830

package.json详解以及package-lock.json的作用的更多相关文章

  1. JSON详解(转)

    JSON详解 JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格 ...

  2. JSON详解(转载)

    JSON详解 阅读目录 JSON的两种结构 认识JSON字符串 在JS中如何使用JSON 在.NET中如何使用JSON 总结 JSON的全称是”JavaScript Object Notation”, ...

  3. javaScript系列:JSON详解

    JSON详解   JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交 ...

  4. Spring Boot 之使用 Json 详解

    Spring Boot 之使用 Json 详解 简介 Spring Boot 支持的 Json 库 Spring Web 中的序列化.反序列化 指定类的 Json 序列化.反序列化 @JsonTest ...

  5. 问题:JsonConvert;结果:JSON详解

    JSON详解 JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式.XML也是一种数据交换格 ...

  6. JSON详解+ C# String.Format格式说明+ C# ListView用法详解 很完整

    JSON详解 C# String.Format格式说明 C# ListView用法详解 很完整

  7. 详解synchronized与Lock的区别与使用

    知识点 1.线程与进程 在开始之前先把进程与线程进行区分一下,一个程序最少需要一个进程,而一个进程最少需要一个线程.关系是线程–>进程–>程序的大致组成结构.所以线程是程序执行流的最小单位 ...

  8. VSCode插件开发全攻略(三)package.json详解

    更多文章请戳VSCode插件开发全攻略系列目录导航. package.json 在详细介绍vscode插件开发细节之前,这里我们先详细介绍一下vscode插件的package.json写法,但是建议先 ...

  9. 【转】docker配置参数详解---/etc/docker/daemon.json完整参数

    docker-daemon.json各配置详解 { “api-cors-header”:"", ——————在引擎API中设置CORS标头 “authorization-plugi ...

  10. c++ json 详解

    一. 使用jsoncpp解析json Jsoncpp是个跨平台的开源库,首先从http://jsoncpp.sourceforge.net/上下载jsoncpp库源码,我下载的是v0.5.0,压缩包大 ...

随机推荐

  1. scrum-master个人实践回顾总结

    个人回顾总结 一.开课提出问题 第一次博客地址:https://www.cnblogs.com/Slow-Walker/p/11513179.html 二.问题回答 2.1问题1:针对单元测试 怎么保 ...

  2. Detectron2源码阅读笔记-(二)Registry&build_*方法

    ​ Trainer解析 我们继续Detectron2代码阅读笔记-(一)中的内容. 上图画出了detectron2文件夹中的三个子文件夹(tools,config,engine)之间的关系.那么剩下的 ...

  3. Educational Codeforces Round 65 (Rated for Div. 2)题解

    Educational Codeforces Round 65 (Rated for Div. 2)题解 题目链接 A. Telephone Number 水题,代码如下: Code #include ...

  4. javascript学习4、Function函数、伪数组arguments

    一.Function函数基础 函数:就是将一些语句进行封装,然后通过调用的形式,执行这些语句. 1.函数的作用: 将大量重复的语句写在函数里,以后需要这些语句的时候,可以直接调用函数,避免重复劳动. ...

  5. redux的知名ppt

    https://slides.com/jenyaterpil/redux-from-twitter-hype-to-production#/20

  6. Saint John Festival Gym - 101128J (凸包二分)

    Problem J: Saint John Festival \[ Time Limit: 1 s \quad Memory Limit: 256 MiB \] 题意 给出\(n\)个大点,和\(m\ ...

  7. Netflix-mantis 实时数据流开发平台

    mantis 是netflix 开源的已经在netflix 使用了多年的实时流处理平台,目前从官方文档的介绍,在netflix使用场景很多 使用场景 上下文报警 监控netflix 的微服务 异常追踪 ...

  8. STL next_permutation 全排列

    调用方法: ]={,,,}; )){ ;i<;i++) printf("%d ",arr[i]); puts(""); } 测试效果: 注:可以看到1 2 ...

  9. 洛谷P5171 Earthquake

    题面 题解 我们先把样例画出来: 看到它是一个减函数感觉很烦,考虑把函数转过来一下: 转过来的函数通过推导可得为: \[ y = \frac abx + \frac {c \bmod a}b \] 于 ...

  10. 第10组 Alpha冲刺(1/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 学习Android studio和Java,基本了解APP前端的制作 完善项目APP原型 展示GitHu ...