相关文章推荐
朝气蓬勃的柿子  ·  luban-react-cli CDN ...·  2 月前    · 
豁达的帽子  ·  Externals - Rspack·  2 月前    · 
还单身的弓箭  ·  TypeError: Cannot ...·  2 月前    · 
喝醉的哑铃  ·  New Override feature ...·  2 月前    · 
细心的机器猫  ·  How to Fix npm Peer ...·  2 月前    · 
近视的机器猫  ·  git 导出提交记录-掘金·  3 年前    · 
好帅的柠檬  ·  SQL查询(3) - 掘金·  3 年前    · 
"@storybook/react" : "^6.3.7" , "babel-loader" : "^8.2.2" , "babel-preset-react-app" : "^10.0.0" , "less" : "^4.1.2" , "less-loader" : "^5.0.0" , "style-loader" : "^1.3.0" , "ts-loader" : "^6.0.4"

我们安装的依赖会根据 -D 参数来记录在在 dependencies devDependencies 中,如:

"dependencies": {
    "@types/react": "^16.14.14",
    "@types/react-dom": "^16.9.14",
    "react": "^16.13.1",
    "react-dom": "^16.13.1",
    "typescript": "^3.8.3"

其中key为依赖包名,后面的value为安装的版本号。

package.json中支持以semver表示法来更新升级所需要的依赖版本。

  • ~16.13.1表示只更新补丁版本,即16.13.2可以,16.14.0不可以
  • ^16.13.1表示更新补丁版本和次版本,即16.14.0和16.13.2都可以
  • 16.13.1表示始终使用该版本

然而,在我们的项目中本地使用的版本为^16.13.1,package.json中也记录了^16.13.1。在把项目上传到github的时候,一般不会将node_modules一起上传,然而在别人拉取我们项目的时候需要npm install来安装相关的依赖,由于package.json一般不会指定具体版本,所以^16.13.1在安装的时候可能会安装成^16.13.2。所以会造成一个问题:不同开发者拉取的同一个项目,安装的依赖版本可能不相同,可能会带来一些接口的兼容问题或更新后的某些行为特征不一样。这时候我们需要package-lock.json来帮助我们指定版本,避免不必要的环境错误。

同一个依赖,在package-lock.json中是这样记录的:

"react-dom": {
      "version": "16.13.1",
      "resolved": "https://registry.npmmirror.com/react-dom/-/react-dom-16.13.1.tgz",
      "integrity": "sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag==",
      "requires": {
        "loose-envify": "^1.1.0",
        "object-assign": "^4.1.1",
        "prop-types": "^15.6.2",
        "scheduler": "^0.19.1"

其中resolved保存了npm registry安装的依赖的tgz包地址,integrity是用于校验的hash值,requires记录了该依赖相应的子依赖。

有了package-lock.json,在每次npm install的时候,npm会比较两个文件,如果package.jsonpackage-lock.json中的依赖版本兼容,那会安装package-lock.json中的下载;如果不兼容,会根据package.json中的版本更新package-lock.json,再进行下载。package-lock.json的存在使得node不会自动更新package.json,必须强制指定版本安装。

为什么需要package-lock.json而不是在package.json指定一个版本?

package.json中指定模块版本,只能指定”最外层”的版本。比如将A模块固定为1.0.0版本,然而A模块依赖的B、C版本还是不受约束的^写法,如果B、C版本更新了这样也会引发类似的兼容问题。

我们在搭建项目的时候,通过 npm 安装的依赖模块时,package.json文件中依赖的版本号前面会带符号 ^,有时候我们看别人的项目时也可能会看版本前带符号 ~ ,或者什么也不带,其中会有什么区别呢?而且当你的 npm 版本升级到 5.X.X 版本以上的时候,对应目录下还是自动生成一个 package-lock.json 文件,这个文件的作用又是什么呢。博主根据网上资料简单说明一下。 1.package.json 版本 dependencies: { react: ^16.8.0 react: ~16.8.0, react: 16.
packagepackage-lock package.json: 主要用来定义项目中需要依赖的包 package-lock.json: 在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。 '^' : 放在版本号之前,表示向后兼容依赖,说白了就是在大版本号不变的情况下,下载最新版的包 项目中引入的包版本号之前经常会加^号,每次...
package.jsonpackage-lock.json的区别 参考文档 https://nodejs.dev/learn/the-package-lock-json-file package-lock.json是为了弥补package.json的一些不足之处。 package.json中记录的包依赖版本信息遵循如下语法: 如果package.json中记录的版本信息格式为~0.13.0,则表示仅允许更新补丁版本(0.13.1),不允许更新小版本(0.14.0) 如果package "scripts": { "serve": "vue-cli-service serve --port 8081", "build": "vue-cli-service build", "lint": "vue-cli-service lint" "dependencies": {
在合并分支的时候会遇到package-lock.json的冲突,本来刚开始没有在意,认为也没什么。但是直到package-lock.json出现了一大片的冲突时,我才觉得问题是真的有点大。 问题排查:很大概率是node版本和npm版本的问题。然后问各组员大家的npm版本,发现有两个同事是6.x版本的,而我自己的是7.x版本的npm。经过自己的测试,使用npm i 安装,发现6.x版本的npm安装依赖(package-lock.json)如下: 但是7.x版本的npm安装的依赖会是有一个pac
package.json 是在运行 “ npm init ”时生成的,主要记录项目依赖,有以下结构 name:项目名,也就是在使用npm init 初始化时取的名字,但是如果使用的是npm init -y 快速初始化的话,那这里的名字就是默认存放这个文件的文件名; version:版本号; private:希不希望授权别人以任何形式使用私有包或未发布的; scripts-serve:是vue的项目启动简写配置; scripts-build:是vue的打包操作简写配置;
项目依赖: 在项目的开发阶段和线上运营阶段,都需要依赖的第三方库文件,称为项目依赖,也就是只要是通过npm install 第三方模块名安装的库文件,都是项目依赖。 项目依赖会被记录在package.json文件中的dependencies字段中,如果项目依赖了jquery,那么在package.json文件中的dependencies字段中就会有jquery。 开发依赖: 在项目的开发阶段需要依赖,线上运营阶段不需要依赖的第三方库文件,称为开发依赖。 如果要下载开发依赖,要在命令行中输入:npm inst
m0_59889760: <div class="pics" v-for="(item, index) in orderInfo.imgUrls" :key="index" v-else> <div v-if="index < num" @click="imgClick(index)" class="img-container"> <image class="evidence-img" :src="item" mode="widthFix" alt /> 这段代码for会全部执行完再去判断是否显示还是判断if去渲染 解析flex属性:flex:1究竟是什么 前端小王hs: