1、什么是package.json

package.json文件是Node.js项目中的一个描述文件,执行npm init命令初始化项目后,在项目的根目录下自动生成该文件。package.json包含了项目的配置信息以及项目所需的各种模块,使用npm install(简写:npm i)命令后会自动根据package.json下载所需的模块。基本信息如下:

  1. {
  2.   "name": "test",
  3.   "version": "1.0.0",
  4.   "description": "",
  5.   "main": "index.js",
  6.   "scripts": {
  7.     "test": "echo \"Error: no test specified\" && exit 1"
  8.   },
  9.   "author": "",
  10.   "license": "ISC",
  11.   "dependencies": { }
  12. }

2、package.json的属性说明

  • name:名称
  • version:版本
  • description:描述
  • main:npm包项目的主要入口文件,必须的
  • module:打包需要的入口文件
  • typings:TypeScript 的入口文件
  • files: 发布package时,控制哪些文件会发布上去,如:

    "files": ["src","dist/*.js","types/*.d.ts"]
  • gitHooks:代码质量检查,如:

    "gitHooks": {"pre-commit": "lint-staged","commit-msg": "node scripts/verify-commit-msg.js"}
  • scripts:启动脚本,一般较长的命令可以设置脚本启动,详情请看2.1
  • repository:git仓库所在位置,如:

    "repository": {"type": "git","url": "git+https://github.com/ForeverS2C"}
  • keywords:关键字
  • author:作者
  • license:开源协议
  • bugs:bug地址
  • homepage:主页
  • devDependencies:项目依赖,详情请看2.2
  • config:设置一些用于npm包的脚本命令会用到的配置参数
  • peerDependencies:其他依赖包,详情请看2.3
  • engines:指定项目所需要的node.js版本,如:

    "engines": {"node": ">=8.9.1","npm": ">=5.5.1","yarn": ">=1.3.2"}
  • browserslist:支持的浏览器,如:

    "browserslist": ["last 3 Chrome versions","last 3 Firefox versions","Safari >= 10","Explorer >= 11","Edge >= 12","iOS >= 10","Android >= 6"]

2.1、scripts

scripts可以简单的理解为:自定义脚本命令,在命令行中通过执行npm run+变量来执行这段脚本

  • 原理:

    使用npm run script执行脚本的时候都会创建一个shell,然后在shell中执行指定的脚本。这个shell会将当前项目的可执行依赖目录(node_modules/.bin)添加到环境变量path中,当执行之后之后再恢复原样。也就是说脚本命令中的依赖名会直接找到node_modules/.bin下面的对应脚本,而不需要加上路径。

  • 使用:

    npm run + 变量名称

    如上图中,即可用npm run dev || npm run start || npm start来启动项目

  • 四个可以简写的脚本执行命令

    npm start === npm run start

    npm stop === npm run stop

    npm test === npm run test

    npm restart === npm run stop && npm run restart && npm run start

2.2、dependencies和devDependencies

执行npm i的时候会自动将两者引入的依赖下载到node_modules下。这两者的区别就在于项目开发和运行时,如何安装所需要的依赖。我们的项目分为生产环境和开发环境,一般说的“项目上线”,就是打包开发环境下的代码发布到生产环境的这个过程。简单的说:

dependencies------生产环境

devdependencies------开发环境

在开发的时候,只需要考虑哪种依赖(模块)是开发的时候需要?还是上线的时候需要?或者两者都需要,比如引入Vue时,两者都需要,我们可以使用npm i vue -save-dev,再比如引入webpack,该依赖只需开发环境下打包使用,线上不需要,所以我们可以使用npm i webpack -save-dev

常用的命令有:

  1. npm install module-name -save 自动把模块和版本号添加到dependencies部分
  2. npm install module-name -save-dev 自动把模块和版本号添加到devdependencies部分

注意:

  • '-save'可以简称为:-S
  • '-save-dev'可以简称为:-D

2.3、peerDependencies

devDependencies和dependencies相似,如果你经常封装插件、使用一些ui组件库,自然对peerDependencies就不会陌生了。

  • 问题的产生:

    在项目结构中,你引入了一个父类的包(A),当你需要引入类似父类下的一个子类包(B)时,是做不到的,因为node只会在项目的node_modules文件夹中找B,并不会先找到A,再从A文件夹找B。
  • 问题的解决:

    引入peerDependencies配置:{ "peerDependencies": { "B": "1.0.0" } }就可以解决了

package.json文件配置说明的更多相关文章

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

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

  2. node 通过指令创建一个package.json文件及npm安装package.json

    描述包的文件是package.json文件. 一个这样的文件,里面的信息还是挺大的.我们可以放弃手动建立.为了练手我们有命令行来建一个这样的包; 完成name,varsion....license项的 ...

  3. Nodejs package.json文件介绍

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

  4. 使用grunt-init自动创建gruntfile.js和package.json文件

    使用grunt-init可以自动创建gruntfile.js和package.json文件.下面说一下过程: 1.全局安装grunt-init npm install -g grunt-init 2. ...

  5. npm package.json文件解读

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

  6. npm 和package.json 文件

    你可能还记得使用vue-cli 创建vue项目.当创建项目完成后,我们进入到项目目录,启动cmd命令窗口,输入npm install,它就会安装一堆东西(依赖),然后再输入npm run dev, 我 ...

  7. package.json文件配置信息

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

  8. npm init 命令生成package.json文件

    通过npm init 命令可以生成一个package.json文件.这个文件是 整个项目的描述文件.通过这个文件可以清楚的知道项目的包依赖关系,版本,作者等信息.每个NPM包都有自己的package. ...

  9. package.json文件中dependencies和devDependencies的区别

    在工作和学习中,我经常会用的npm 下载各种包,有时就会遇到各种npm 的形式,现在就捋一捋 首先要先了解   package.json文件中dependencies和devDependencies的 ...

随机推荐

  1. 「面向 offer 学算法」笔面试大杀器 -- 单调栈

    目录 前言 单调栈 初入茅庐 小试牛刀 打怪升级 出师试炼 前言 单调栈是一种比较简单的数据结构.虽然简单,但在某些题目中能发挥很好的作用. 最近很多大厂的笔试.面试中都出现了单调栈的题目,而还有不少 ...

  2. 使用Built-in formatting来创建log字符串

    在一次哦测试中,sonar-qube总是报Use the built-in formatting to contruct this argument, 在网上查了一下,原来它是推荐这样做: log.i ...

  3. Mybati源码解析篇之六剑客!!!

    目录 前言 环境版本 Mybatis的六剑客 SqlSession 有何方法 语句执行方法 立即批量更新方法 事务控制方法 本地缓存方法 获取映射方法 有何实现类? Executor 实现类 Base ...

  4. Kubernetes-5:搭建企业级私有仓库Harbor

    搭建企业级私有仓库Harbor 安装需求 python版本 >= 2.7 Docker引擎版本 >= 1.10 docker-compose版本 >= 1.6.0 安装环境 一.Py ...

  5. path.resolve和path.join的区别

    // test.js const path = require('path') let x1 = path.resolve('/目录1/目录2', '/目录3/目录4/') let x2 = path ...

  6. jzoj 6798. 【2014广州市选day2】regions

    Description 在平面上堆叠着若干矩形,这些矩形的四边与平面X坐标轴或Y坐标轴平行.下图展示了其中一种情况,3个矩形的边将平面划分成8个区域: 下面展示了另一种稍稍复杂一些的情况: 你的任务是 ...

  7. FFmpeg开发笔记(四):ffmpeg解码的基本流程详解

    若该文为原创文章,未经允许不得转载原博主博客地址:https://blog.csdn.net/qq21497936原博主博客导航:https://blog.csdn.net/qq21497936/ar ...

  8. os.walk模块查找目录下的所有txt文件

  9. Linux实战(7):centos7安装xrdp

    系统环境:最小化安装,无安装桌面化 操作 yum更新 yum -y update 安装依赖. tigervnc-server.xrdp .GNOME Desktop yum -y install ep ...

  10. python实现多分类评价指标

    1.什么是多分类? 参考:https://www.jianshu.com/p/9332fcfbd197 针对多类问题的分类中,具体讲有两种,即multiclass classification和mul ...