package.json 与 package.lock.json

2022-01-19  本文已影响0人  香蕉不拿呢
前言

package.jsonpackage.lock.json在项目开发的时候经常接触到,这里做一个整理。

一、package.json

package.json文件通常位于项目的根目录,包含了项目的各种数据:项目的描述信息,项目的相关依赖。

1 创建文件

package.json可以手动创建,也可以自动生成。
node环境下输入以下命令,就会自动生成package.json文件。

npm init
2 json数据
{
    "name": "banana",   // 项目名称
    "version":"0.0.1",  // 版本信息
    "description": "描述",  // 描述信息
    "keywords":["node.js","BANANA", "theme"], // 字符串数组 助于人们在npm库中搜索的时候发现你的模块
    "homepage": "https://banana.com", // 项目的主页地址
    "bugs":{"url":"http://banana/","email":"banana@xxxx.com"}, // 项目问题的反馈issue地址或者一个邮箱
    "license": "ISC",  // 项目的协议
    "author": "banana", // 项目作者
    "contributors":[{"name":"banana","email":"banana@xxxx.com"}], // 项目作者
    "main": "index.js", // 加载入口文件
    "bin": {    // 指定每个内部命令对应的可执行文件的位置。
        "webpack": "bin/index.js",
    }, 
    "man": ["./doc/xxxx"], // 指定当前模块的man文档的位置。
    "directories": "",  // 描述模块的结构
    "repository": {  // 指定一个代码存放地址,对想要为你的项目贡献代码的人有帮助
        "type": "git",
        "url": "https://banana/"
    },
    "scripts": { // 指定了运行脚本命令的npm命令行缩写
      "start": "webpack serve --config webpack.config.dev.js --progress"
    },
    "config": { "port" : "8080" }, // 添加命令行的环境变量。
    "dependencies": {}, // 项目生产环境所依赖的模块
    "devDependencies": { // 项目开发环境所需要的模块
        "webpack": "^5.38.1",
    },
    "engines": {"node": "0.10.x"}, // 运行的环境信息
    "os" : [ "win32", "darwin", "linux" ], // 限制只能在哪个操作系统上运行
    "cpu" : [ "x64", "ia32" ], // 限制模块只能在某种架构的cpu下运行
    "private": false, // 属性被设置为true,npm将拒绝发布它,这是为了防止一个私有模块被无意间发布出去。
    "publishConfig": { // 配合private来使用,如果只想让模块被发布到一个特定的npm仓库,如一个内部的仓库。
        "tag": "1.0.0",
        "registry": "https://registry.npmjs.org/",
        "access": "public"
    }
  }
4 scripts字段

scripts字段指定了node环境的运行脚本的npm命令行缩写。
package.json有以下配置,可以在node命令行输入npm run start

"scripts": {
    "start": "webpack serve --config webpack.config.dev.js --progress"
},
5 dependencies与devDependencies字段
5.1 描述
5.2 npm install

不同的安装命令,会把依赖写入不同的字段里面,下面列了下清单

5.2.1 dependencies
npm install // 不加参数时,默认会把依赖写入dependencies字段
npm install --s
npm install -S
5.2.2 devDependencies
npm install --save-dev
npm install -D
6 版本号规则

当输入脚本npm install xxx@x.y.z的时候会去仓库下载指定依赖。
所有版本号格式为x.y.z: 主版本.次版本.补丁版本

"devDependencies": {
    "webpack": "^5.38.1",
},

前缀符号

二、package.lock.json
1 官方描述:

package-lock.json它会在npm更改node_modules目录树或者package.json时自动生成的,它准确的描述了当前项目npm包的依赖树,并且在随后的安装中会根据package-lock.json来安装,保证是相同的一个依赖树,不考虑这个过程中是否有某个依赖有小版本的更新。

{
  "name": "project-name",
  "version": "0.1.0",
  "lockfileVersion": 1,
  "requires": true,
  "dependencies": {
    "@ant-design-vue/babel-helper-vue-transform-on": {
      "version": "1.0.1",
      "resolved": "https://registry.npm.taobao.org/@ant-design-vue/babel-helper-vue-transform-on/download/@ant-design-vue/babel-helper-vue-transform-on-1.0.1.tgz",
      "integrity": "sha1-0hnZL04fxeet0hHDR8f6AAUYtiM=",
      "dev": true
    },
  }
}
2 与package.json区别

package.json 描述了依赖的部分信息,
package.lock.json 描述了依赖的详细信息,包括所有依赖的具体版本号,安装地址,sha-1加密后的值,安装在哪个环境,依赖内部所需要的依赖项。

当执行npm install命令的时候,如果项目中有package-lock.json,那么就会从中解析所需安装的依赖,而不是通过package.json

3 注意

cnpm不支持package.lock.json

上一篇 下一篇

猜你喜欢

热点阅读