学习资料
笔记
npm install
npm 安装 从 3.x版本开始安装的依赖将的算法从深度优先换成了广度优先。
"dependencies": {
A: "1.0.0",
B: "1.0.0",
C: "1.0.0"
}
依赖情况:
A@1.0.0 -> D@1.0.0
B@1.0.0 -> D@2.0.0
C@1.0.0 -> D@2.0.0
npm 2.x安装完成后是这样的包情况:
├── node_modules
│ ├── A@1.0.0
│ │ └── node_modules
│ │ │ └── D@1.0.0
│ ├── B@1.0.0
│ │ └── node_modules
│ │ │ └── D@2.0.0
│ └── C@1.0.0
│ │ └── node_modules
│ │ │ └── D@2.0.0
npm 3.x安装完成后是这样的包情况:
├── node_modules
│ ├── A@1.0.0
│ │ └── node_modules
│ │ │ └── D@1.0.0
│ ├── B@1.0.0
│ ├── C@1.0.0
│ └── D@2.0.0
package-lock.json
从npm 5.x开始,执行npm install时会自动生成一个package-lock.json 文件。
package-lock.json文件精确描述了node_modules 目录下所有的包的树状依赖结构,每个包的版本号都是完全精确的。
依赖包分类
dependencies
npm i 包
这种依赖在项目最终上线或者发布`npm`包时所需要,
即其中的依赖项应该属于线上代码的一部分。
devDependencies
npm i -D 包
这种依赖只在项目开发时所需要,即其中的依赖项不应该属于线上代码的一部分。
注意:
千万别以为只有在dependencies中的模块才会被一起打包,而在devDependencies中的不会!模块能否被打包,取决于项目里是否被引入了该模块! 在业务项目中dependencies和devDependencies没有什么本质区别,只是单纯的一个规范作用,在执行npm i时两个依赖下的模块都会被下载;而在发布npm包的时候,包中的dependencies依赖项在安装该包的时候会被一起下载,devDependencies依赖项则不会。
依赖包版本号介绍
1.2.3
表示精确版本号。任何其他版本号都不匹配。
^1.2.3
"^1.2.3" 等价于 ">= 1.2.3 < 2.0.0"。即只要最左侧的 "1" 不变,其他都可以改变。所以 "1.2.4", "1.3.0" 都可以兼容。
"^0.2.3" 等价于 ">= 0.2.3 < 0.3.0"。因为最左侧的是 "0",那么只要第二位 "2" 不变,其他的都兼容,比如 "0.2.4" 和 "0.2.99"。
"^0.0.3" 等价于 ">= 0.0.3 < 0.0.4"。大版本号和小版本号都为 "0" ,所以也就等价于精确的 "0.0.3"。
~1.2.3
"~1.2.3" 列出了小版本号 "2",因此只兼容第三位的修改,等价于 ">= 1.2.3 < 1.3.0"。
"~1.2" 也列出了小版本号 "2",因此和上面一样兼容第三位的修改,等价于 ">= 1.2.0 < 1.3.0"。
"~1" 没有列出小版本号,可以兼容第二第三位的修改,因此等价于 ">= 1.0.0 < 2.0.0"
package与package-lock版本号不同
大版本相同,小版本不同
package > package-lock
在执行`npm install`时,会将该模块更新到`大版本下的最新的版本`,
并将版本号更新至`package-lock.json`。
// package.json 中修改版本
"dependencies": {
"clipboard": "^1.5.12",
}
// package-lock.json 中原版本
"clipboard": {
"version": "1.5.10",
},
// 执行完 npm install 后,package-lock.json 中
"clipboard": {
"version": "1.7.1", // 更新到大版本下的最新版本
},
package < package-lock
`package-lock.json`中的版本锁定
大版本不同
在执行`npm install`时,都将根据`package.json`中`大版本下的最新版本`进行更新,
并将版本号更新至`package-lock.json`。
// package-lock.json 中原版本
"clipboard": {
"version": "2.0.4",
}
// package.json 中修改版本
"dependencies": {
"clipboard": "^1.6.1",
}
// 执行完npm install后,package-lock.json 中
"clipboard": {
"version": "1.7.1", // 更新到大版本下的最新版本
}
npm scripts脚本
串行执行
npm run script1 && npm run script2
并行执行
npm run script1 & npm run script2
env环境变量
可以通过process.env.npm_package_key1_key2获取package.json里面所有的信息
{
"name": "xhp",
"version": "1.1.1",
"description": "shenhao",
"main": "index.js",
"repository": {
"type": "git",
"url": "git+ssh://git@gitlab.com/xxxx/sh.git",
"test": "a"
}
}
process.env.npm_package_name // xhp
process.env.npm_package_repository_test // a