简单说会以当前 package.json 包里对应包符合要求的最新版记录在 lockfiles 里,如果后续无论是直接依赖的 A 发版,或者间接依赖的 B, C 发版,只要我们不动 package.json, lockfiles 都不会重新生成 A 发布了新版本 1.1.0,虽然我们 package.json 写的是 ^1.0.0 但是因为 lockfiles 的处在,npm i 并不会自动升级,我们可以手动运行 npm i [email protected] 来实现升级因为 1.1.0 版本与 lockfiles 里记录的 [email protected] 是不一致的,因此会更新 lockfiles 里的 A 的版本为 1.1.0 B 发布了新版本 1.0.1, 1.0.2, 1.1.0, 此刻如果我们不做操作是不会自动升级 B 的版本的,但如果此刻 A 发布了 1.1.1,虽然并没有升级 B 的依赖,但是如果我们项目里升级 [email protected],此时 lockfiles 里会把 B 直接升到 1.1.0 ,因为此刻^1.0.0 的最新版本就是 1.1.0 经过这些操作后 package.json, lockfiles 变成 Show
2022年08月29日 09:52 · 阅读 1506
携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情 说到前端开发,就一定离不开 虽然每天都用 在说 本地安装的包只能在当前目录下使用。 本地安装很简单,以 在实际项目开发过程中,本地安装我们都会先生成 本地安装的包又分为开发依赖 对于一些只会在开发环境中用到的包我们可以安装在开发依赖 对于一些会在生产环境中用到的包我们可以安装在生产依赖 那么怎么让安装的包分别放到对应的依赖位置呢? 如果想要安装的包放在开发依赖 如果想要安装的包放在生产依赖 注意如果我们没传递依赖参数。会把包默认安装到生产依赖 全局安装的包能在当本机所有目录下使用。我们在安装包的时候传递参数 全局安装的包路径我们可以通过 前面我们只是介绍了 执行安装命令之后,npm 首先会去查找 npm 的配置信息。 其中,我们最熟悉的就是安装时候的源信息。npm 会在项目中查找是否有 获取完配置文件之后,就会构建依赖树。首先会检查下项目中是否有 在有了依赖树之后,就可以根据依赖树下载完整的依赖资源。在下载之前,会先检查下是否有缓存资源,如果存在缓存资源的话,那么直接将缓存资源解压到 生成 接下来我们说说 首先要明确一点, 下面我们介绍下怎么创建 基本问题问完之后 如果觉得这样一步一步太慢的话我们还可以一键生成。使用 到这里,小伙伴们肯定有疑问了,一键生成的 我们来看看npm的初始配置吧,使用 可以发现我们的
我们再来生成一遍 可以发现,我们的 package.json详解
下面笔者分别介绍各个配置代表的意义。 name
version
npm依赖包版本号
每个版本号都形如: 主版本号当新版本无法兼容基于前一版本的代码时,则提高主版本号; 次版本号当新版本新增了功能和特性,但仍兼容前一版本的代码时,则提高次版本号; 修订号当新版本仅仅修正了漏洞或者增强了效率,仍然兼容前一版本代码,则提高修订号; 最优版本默认情况下, 举个例子,我们安装
在安装的时候它会选择目前的一个最新的版本进行安装,我们查看 这里我们自动安装的也就是 那什么是最优版本呢? 最优版本会在版本前多了一个 那这两个符号有什么区别呢? ^ 兼容某个大版本
~ 兼容某个次版本而
看了上面版本号的指定后,我们可以知道,当我们使用了 举个例子 假设我们中安装了 这时也许有同学想到,那么我们在 这个想法固然是不错的,但是你只能控制你自己的项目锁死版本号,那你项目中依赖包的依赖包呢?你怎么控制限制别人锁死版本号呢? description
author
contributors
homepage
repository
bugs
依赖类型前面说到有开发依赖和生产依赖,其实npm还有同版本的依赖、捆绑依赖、可选依赖。
dependencies 生产依赖dependencies 表示项目依赖,这些依赖都会成为你的线上生产环境中的代码组成的部分。当它关联到 npm 包被下载的时候, devDependencies 开发依赖
这里笔者啰嗦一句,当我们只开发应用,不对外开源的话,包随意放在 peerDependencies 同版本的依赖peerDependencies 表示同版本的依赖,很多小伙伴肯定难以理解,下面笔者举个例子就明白了。
啊!这是怎么回事呢?其实他就是用到了 这下知道什么意思了吧,就是这个包它非常清楚的知道,你使用我的时候必定是在 这样的好处就是 bundledDependencies 捆绑依赖
当我们此时执行 实际使用到这个压缩包的时候, 这样做的意义是什么呢? 如果 这里需要注意的是: optionalDependencies 可选依赖
engines当我们维护一些旧项目时,可能对
需要注意, scripts关于 config
main
browser
module
需要注意, 上面三个的入口入口文件相关的配置是有差别的,特别是在不同的使用场景下。在
bin
上面的例子相当于定义了一个命令 files
如果有不想提交的文件,可以在项目根目录中新建一个
man
需要注意:
对于上面的配置,可以使用以下命令来执行查看文档:
directories
在实际的项目目录中,我们可能没有按照这个规范进行命名,那么就可以在
这个属性实际上没有什么实际的作用,当然不排除未来会有什么比较有意义的用处。 private
preferGlobal
它并不会真正的防止用户进行局部的安装,只是对用户进行提示,防止产生误解。 publishConfig
os
cpu该配置和
可以看到,黑名单和白名单的区别就是,黑名单在前面加了一个 license
typings或者types
eslintConfig
babel
unpkg使用该字段可以让 lint-staged
使用 gitHooks
这里就是配合 browserslist
当然你也可以单独建立 package-lock.json 详解前面说了 一个 package-lock.json 里面的每个依赖主要是有以下的几部分组成的:
假设我们的项目依赖
那什么情况下package.json和package-lock.json里面的版本号一致呢?当 或者我们 或者我们 package-lock.json什么时候会变
因为他是会记录我们的依赖包地址的。
怎么安装指定版本的包我们知道,使用 如果在根目录下直接运行 那么怎么安装指定版本的包呢? 我们只需要安装的时候带上版本号就可以啦。比如笔者上面
我们最新版本的 我们知道,安装完生成 如果我想更新到最新版本的包该怎么办呢? 怎么更新包的版本更新包的版本有很多种方式。 npm install指定版本我们知道最新包的版本,直接按上面的安装指定包并带上版本号即可。原理和安装特定版本的包一致。
它会同步修改我们的 npm update不知道最新包的版本,我们运行
它会将指定包更新成最新版本,并且同步修改我们的 如果想更新项目下所有的包,直接运行 请注意,更新包它是会遵循我们的最优版本号控制的。也就是说当我们的版本是被 比如笔者安装的
当我们
删除 |