"@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.json和package-lock.json中的依赖版本兼容,那会安装package-lock.json中的下载;如果不兼容,会根据package.json中的版本更新package-lock.json,再进行下载。package-lock.json的存在使得node不会自动更新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.
package和package-lock
package.json: 主要用来定义项目中需要依赖的包
package-lock.json: 在 npm install时候生成一份文件,用以记录当前状态下实际安装的各个npm package的具体来源和版本号。
'^' : 放在版本号之前,表示向后兼容依赖,说白了就是在大版本号不变的情况下,下载最新版的包
项目中引入的包版本号之前经常会加^号,每次...
package.json与package-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:
解析flex属性:flex:1究竟是什么
前端小王hs: