package.json和package-lock.json

目录

一、package.json和package-lock.json文件的区别?

二、package.json中怎么区分开发依赖和生产依赖?安装包时的 ' -S、-D '等参数含义?

三、为什么有些包名,以@开头,有些没有?

四、package.json包信息版本号如' ^1.0.0、~1.0.0、1.0.0 '等方式的区别?

五、如何在项目中限制node的版本号和npm的版本号?

一、package.json和package-lock.json文件的区别?

package.json是是手动维护的文件,用于记录项目中所依赖的包以及这些包的版本号等,但是并没有保存依赖包信息;

  1. 生成package.json文件指令:npm init -y

  2. package.json中的信息摘要

    参数描述
    name项目名称
    version项目版本号
    scripts可以使用预定义变量和自定义变量,可以参考npm script 操作文章
    engines说明具体的版本号;例如:node、npm等 ;需要注意,engines只是起一个说明的作用,即使用户安装的版本不符合要求,也不影响依赖包的安装。
    dependencies生产依赖 npm i 包名称 -S 或者 npm i 包名称 --save
    devDependencies开发依赖 npm i 包名称 -D 或者 npm i 包名称 --save-dev
    config自定义变量 ( 用来配置scripts运行时的配置参数 )
    lint-staged是一个在Git暂存文件上运行linters的工具,配置后每次修改一个文件即可给所有文件执行一次lint检查,通常配合gitHooks一起使用。使用lint-staged时,每次提交代码只会检查当前改动的文件。
    gitHooks用来定义一个钩子,在提交(commit)之前执行ESlint检查。在执行lint命令后,会自动修复暂存区的文件。修复之后的文件并不会存储在暂存区,所以需要用git add命令将修复后的文件重新加入暂存区。在执行pre-commit命令之后,如果没有错误,就会执行 git commit
    license用于指定软件的开源协议; MIT :只要用户在项目副本中包含了版权声明和许可声明,他们就可以拿你的代码做任何想做的事情,你也无需承担任何责任。Apache :类似于 MIT ,同时还包含了贡献者向用户提供专利授权相关的条款。GPL :修改项目代码的用户再次分发源码或二进制代码时,必须公布他的相关修改。
    type用于定义package.json文件和该文件所在目录根目录中.js文件和无拓展名文件的处理方式 ’moduel’则当作es模块处理;’commonjs’则被当作commonJs模块处理
    …………

package-lock.json是自动生成的文件,其中定义的是某个包的具体版本,以及包之间的层叠关系,包括版本号、下载地址等;

  1. 生成package-lock.json指令:npm install --package-lock-only

  2. package-lock.json信息摘要

    参数描述说明
    version依赖包的版本号
    resolved依赖包的安装源(其实就是可以理解为下载地址)
    devDependencies依赖包 node_modeles 中依赖的包(特殊情况下才存在)
    dev表示该模块是否为顶级模块的开发依赖或者是一个的传递依赖关系
    …………

npm install后做了那些事情【转载】

二、package.json中怎么区分开发依赖和生产依赖?安装包时的 ' -S、-D '等参数含义?

在package.json中,dependencies对应生产环境依赖,devDependencies是开发环境依赖。

npm install的时候加上--save是添加到dependencies--save-dev把模块添加到devDependencies部分 。

安装包时的 ' -S、-D '等参数含义是:

  • '-S':类似于 --save,只安装指定的依赖项,不安装其他依赖项。

  • '-D':类似于 --save-dev,只安装指定的开发依赖项,不安装其他依赖项。

三、为什么有些包名,以@开头,有些没有?

@ 符号在 JavaScript 依赖中表示一个命名空间或者作用域,它可以用来区分不同的包或者组织。比如,@angular/core 是 Angular 框架的核心模块,@babel/core 是 Babel 编译器的核心模块。使用 @ 符号可以避免包名冲突或者提高可读性;

当在package.json文件中作为依赖项列出时,作用域包前面是其作用域名称。默认情况下,作用域包是私有的。作用域名称是介于@和斜线之间的所有内容:

@npm/package-name    // "npm" scope

参考:About scopes | npm Docs

四、package.json包信息版本号如' ^1.0.0、~1.0.0、1.0.0 '等方式的区别?

每个版本号都形如:1.2.3,有三部分组成,依次叫主版本号、次版本号、修订号;

主版本号:当新版本无法兼容基于前一版本的代码时,则提高主版本号;

次版本号:当新版本新增了功能和特性,但仍兼容前一版本的代码时,则提高次版本号;

修订号:当新版本仅仅修正了漏洞或者增强了效率,仍然兼容前一版本代码,则提高修订号;

最优版本:默认情况下,npm install xxx --save下载的都是最新版本,并且会在package.json文件里登记一个最优版本号。

^1.0.0 表示兼容某个大版本:

意味着下载的包可能会是更高的次版本号或者修订版本号。(也就是主版本不能变,次版本、修订版本可以随意变)。

~1.0.0 表示兼容某个次版本:

意味着有可能会有更高的修订版本号。(也就是主版本、次版本不能变,修订版本可以随意变)。

1.0.0 表示固定的某个版本号:

意味着固定的版本号。(也就是主版本、次版本,修订版本不能变)。

注意点:当我们想要固定某个包的版本时,不仅仅只是修改package.json,还需要修改package-lock.json;锁定版本应该根据package-lock.json实际应用的版本更新package.json

五、如何在项目中限制node的版本号和npm的版本号?

  1. 说明node的版本号

    通过在 package.json 中指定 engines 字段,可限定项目使用的 node 版本。需要注意,engines只是起一个说明的作用,即使用户安装的版本不符合要求,也不影响依赖包的安装。

    和依赖项一样,如果不指定版本(或者指定“ * ”作为版本),则任何版本的节点都可以。

    "engines": {
        "node": "14.x || 16.x"  // 仅允许用户使用 14 或者 16的版本
    },

    要限制npm的版本号,可以在项目根目录创建一个名为.npmrc的文件,并加入以下语句:

    // .npmrc
    engine-strict = true
  2. 锁定包管理器

    利用 only-allow 工具包、npm scripts 快速实现锁定。

    步骤一: 在项目中 npm install -D only-allow

    步骤二: 在 package.json 文件中进行配置 scripts.preinstall , 允许输入的值 only-allow npm、only-allow yarn…

    "scripts": {
        "preinstall": "npx only-allow npm",
        ...
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值