vue的package.json与package-lock.json有什么区别?

写在前面:

我是一个坚持学习的技术小白,在博客里分享自己的学习总结记录,如果你也在努力变成更好的自己,可以关注我,一起加油!
如果任何问题或交友,欢迎各位与我联系:[email protected]

如何生成 package(-lock).json文件


  • 如果发现你的项目中没有 package.json 文件,说明新建项目时,命令中没有添加 init 关键字,生成package.json文件可以通过输入命令:npm init --yes 来初始化生成此文件。
  • 如果项目中没有 package-lock.json 文件,打开终端输入:npm -v ,查看你的 npm 版本,如果是 npm 5 以下的版本是不会生成此文件的。npm 5 以后的版本,在项目终端中输入:npm install 会安装包,并自动生成 package-lock.json 文件。
    在这里插入图片描述

package(-lock).json文件的作用


        package-lock.json文件内保存了node_modules中所有包的信息,包含这些包的名称、版本号、下载地址。这样带来好处是,如果重新 npm install的时候,就无需逐个分析包的依赖项,因此会大大加快安装速度

        package.json 文件里定义了运行项目需要的各种依赖和项目的配置信息,当我们 npm install 的时候,node 会先从 package.json 文件中读取所有 dependencies 信息,然后根据dependencies 中的信息与 node_modules 中的模块进行对比,如果缺少直接下载,已有的检查更新(见下一点)

        package.json 文件可以锁定依赖包的版本,但只能锁定大版本,也就是版本号的第一位,后面的小版本并不能锁定,每次 npm install 的时候拉取的都是该大版本下的最新小版本,但为了稳定性考虑我们几乎是不能随意升级依赖包的,这将导致很多工作量,此时,package-lock.json 文件起了很大作用,lock 本意就是锁定,这个文件会锁定当前项目中依赖包的版本号,防止 npm install 自动拉取最新版本依赖包。

        当 npm install 时,node 会从 package.json 文件中读取模板名称,从 package-lock.json 文件中读取版本号,然后进行下载或更新,但由于 package-lock.json 锁定了版本号,所以是不能更新的,但如果想要更新依赖包的话,可以使用 npm install packagename (自动更新小版本号) 或 npm install [email protected] (指定版本号)来进行安装才会更新。


package.json属性说明


{
  "name": "vue-online-shop-frontend",
  "version": "1.0.0",
  "description": "A Vue.js project",
  "author": "fuyuanyuan",
  "private": true,
  "scripts": {
    "dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
    "start": "npm run dev",
    "build": "node build/build.js"
  },
    "dependencies": {
    "vue": "^2.5.2",
    "vue-router": "^3.0.1"
  },
  "devDependencies": {
    },
  "engines": {
    "node": ">= 6.0.0",
    "npm": ">= 3.0.0"
  },
  "browserslist": [
    "> 1%",
    "last 2 versions",
    "not ie <= 8"
  ],
  "main": ".postcssrc.js",
  "license": "ISC"
}

name:项目名称

命名时需遵循官方的一些规范与建议:

  • 项目名称会成为 url、命令行中的一个参数或者一个文件夹名称,任何非安全的字符在项目名称中都不能使用(可以使用 validate-npm-package-name)包来检测项目名称是否合法
  • 定义的项目名称要尽量符合项目功能,有意义
  • 如果名称包含符号,将符号去除后不得与现有的模块名重名,例如:vue-online-shop-frontend 已经存在,vue.online.shop.frontend 不可以再创建

version:项目版本

npm 包的模块版本都需要遵循 SemVer 规范,该规范的标准版本号采用 X.Y.Z 格式,其中 X , Y , Z 均为非负的整数,且禁止在数字前补零

  • X:主版本号,修改了不兼容的API
  • Y:次版本号,新增了向下兼容的功能
  • Z:修订号,修正了向下兼容的问题

其中,使用 ^ 用来标识版本范围:

版本标识 版本范围 说明
^2.5.2 2.5.2 <= version < 3.0.0 主版本不为0,允许次要版本和补丁版本升级,(下限是 2.5.2,上限是3.0.0,但不匹配3.0.0)
^0.2.3 0.2.3 <= version < 0.3.0 主版本为0,允许补丁版本升级,(下限是 0.2.3,上限是0.3.0,但不匹配0.3.0)
^0.0.3 0.0.3 <= version < 0.0.4 主版本+次版本都为0,无法升级模块
^1.3 1.3.0 <= version < 2.0.0 主版本不为0,补丁版本因缺失被视作0,允许次要版本+补丁版本升级到到最新(此例下限是1.3.0,上线是2.0.0但不匹配2.0.0)
^0.2 0.2.0 <= version < 0.3.0 主版本为0,补丁版本因缺失被视作0,允许补丁版本升级到最新(此例下限是0.2.0,上限是0.3.0但不匹配0.3.0)
^1 1.0.0 <= version < 2.0.0 主版本不为0,次要版本+补丁版本因缺失被视作0,允许次要版本+补丁版本升级(此例下限是1.0.0,上限是2.0.0但不匹配2.0.0)
^0 0.0.1 <= version < 1.0.0 主版本为0,次要版本因缺失被视作0,补丁版本虽缺失但只能被视作1,允许缺失的次要版本+补丁版本升级到最新(此例下限是0.0.1,上限是1.0.0但不匹配1.0.0)

description:项目描述

用于添加模块的描述信息,便于用户了解该模块。

author:作者

private:定义私有模块

  • 一般公司的非开源项目,都会设置 private 属性值为 true,通过设置该字段可以防止私有模块被无意间发布

scripts:简化终端命令

  • scripts 属性是 package.json 的一种元数据功能,它接收一个对象,对象的属性为可以通过 npm run运行的脚本,值为实际运行的命令。
  • 比如上述代码中,在终端输入命令 npm run dev,就可执行 “webpack-dev-server --inline --progress --config build/webpack.dev.conf.js”

dependencies & devDependencies:项目运行依赖模块(生产环境 & 开发环境)

  • dependencies 字段指定了项目运行所依赖的摸块(生产环境),它是我们生产环境所需要的依赖项,用户 安装npm包的时候只会安装dependencies 里的依赖。
  • 从 字段指定了项目开发所需要的模块(开发环境)。

如果一个模块不在 package.json 文件中 ,我们可以单独安装这个模块,并使用相应的参数,将其写入 dependencies /dependencies 字段中:

npm install --save //写入 dependencies 属性
npm install --save-dev //写入 devDependencies 属性

engines:指定项目 node 版本

  • 用 engines 字段来指定项目 node 版本
  • 也可以指定适用的 npm 版本
  • engines 属性 仅起到一个说明的作用,当用户版本不符合指定值时也不影响依赖的安装。

browserslist:浏览器兼容情况

  • 用来描述浏览器的兼容情况
  • 例如,last 2 verions :表示兼容每个浏览器的最后两个版本

main:项目入口文件

  • main 是 package.json 的另一种元数据功能,用来指定项目加载的入口文件,
  • 当不指定main 字段时,默认值是模块根目录下面的index.js 文件

license:许可证

  • 这是非常重要但经常被忽略的属性。license 字段使我们可以定义适用于 package.json 所描述代码的许可证。
  • license 字段的值通常是许可证的标识符代码——例如 MIT 或 ISC 之类的字符串,它们代表MIT 许可证和 ISC 许可证。

管理你的package.json


        package.json 必须是有效的 json 文件,文件中出现任何的语法错误,都将导致npm 与 package.json 无法交互。建议尽可能使用 npm CLI 更新和管理 package.json,以避免意外将错误引 入package.json 中。使用 npm init 创建你的 package.json 将有助于确保你生成有效的文件。

        最好使用 npm 的命令来管理依赖项,这样可以使你的 package.json 和 node_modules/ 文件夹保持同步。如果手动添加依赖项列表的话,需要你在把依赖项实际安装到项目之前运行 npm install。
        因为 package.json 仅是我们记录依赖项的位置,而 node_modules/ 文件夹是安装依赖项代码的实际位置,所以手动更新 package.json 的依赖项字段不会立即将我们的状态反映到 node_modules/ 文件夹。这就是为什么要用 npm 帮助管理依赖项的原因,因为它会同时更新 package.json 和 node_modules/ 文件夹。

最后


以上为本人的一点学习记录与总结,如有错误,请指出,不胜感激。

猜你喜欢

转载自blog.csdn.net/weixin_42653522/article/details/106388886
今日推荐