NPM

84 阅读2分钟

devDependencies

开发的依赖都装在这:
npm i 包名 --save-dev
npm i 包名 -D
比如webpack vite rollup webpack-cli

dependencies

生产环境所需要的依赖
比如Vue Vuex vue-router md5

peerDependencies

给编写插件的人员或者编写npm包的开发人员去使用
对等依赖
vite plugin 插件不能凭空运行的需要依赖宿主环境 vite

npm换源

npm config list
npm get registry
npm config set registry https://registry.npmmirror.com/

npm install

执行npm install时发生什么
首先安装的依赖都存放再根目录node_modules,默认采用扁平化的方式安装
并且排序规则.bin第一个然后@系列,再然后按首字母abcd排序
使用广度算法遍历,在遍历依赖树时,npm会先处理项目跟目录下的依赖
然后逐层处理每个依赖包的依赖,直到所有依赖处理完毕
在处理每个依赖时,npm会检查改依赖的版本号是否符合依赖树其他依赖的版本要求,如果不符合,会安装合适的版本。

package.json和package-lock.json文本版本
不同时:会根据paxickage.json中的版本号以及语义去下载包,并更新lock文件
相同时:根据lock文件的版本号下载

没有lock文件时
获取包信息,构建依赖树,检查缓存,有缓存解压到node_modules,无缓存下载资源包,检查
完整性,添加到缓存,更新lock文件

package-lock的作用
version:指定了当前包的版本号
resolved:指定了当前包的下载地址
integrity:验证包的完整性
dev:当前包是否是一个开发依赖包
bin:当前包中可执行的文件路径和名称
engines:当前包所依赖的nodejs版本
lock文件帮我们做缓存,通过name+version+integrity生成一个key,这个key找到对应的npm cache\index-v5下的缓存记录

esm和cjs

commonjs的 require module.export
1.引入自己编写的模块 require('./test.js')
2.引入第三方模块 const md5 = require('md5')
3.nodejs内置模块 fs http net 
const fs = require('node: fs')
4.引入json文件 const data = require('./data.json')

esm import exoprt
天然不支持引入json文件

cjs是运行时同步加载,esm是基于编译时异步加载
cjs不可以tree shaking, ems支持,因为cjs是运行时加载,所以编译时不知道用没用

全局变量&全局API

index.js
global.name = '123'
//globalThis.name = '123'
require(child.js)
child.js
console.log(global.name) // 123
浏览器环境定义全局变量用window,nodejs用global
gloablThis根据环境自动判断 globalThis.name = "index"

js的三部分 ECMAScript DOM BOM node环境只能用ECMAScript中的API