node包管理

    0

包管理工具

npm

https://github.com/npm/cli

bash
npm install -g npm npm list -g --depth=0

yarn

https://github.com/yarnpkg/yarn

bash
npm install -g yarn yarn global upgrade yarn yarn add react yarn add react -D yarn global add react

pnpm

https://github.com/pnpm/pnpm

bash
npm install -g pnpm

npm源关联

npm

  • npm get registry 查看源
  • npm --registry registry.npm.taobao.org install any-touch 临时修改
  • npm config set registry registry.npm.taobao.org 持久使用
  • npm config set registry registry.npmjs.org 还原
  • npm config set sass_binary_site https://npm.taobao.org/mirrors/node-sass 设置node-sass镜像

yarn

  • yarn config get registry 查看源
  • yarn add any-touch@latest --registry=registry.npmjs.org/ 临时修改
  • yarn config set registry registry.npm.taobao.org/ 持久修改
  • yarn config set sass_binary_site https://npm.taobao.org/mirrors/node-sass 设置node-sass镜像

pnpm

  • pnpm get registry 查看源
  • pnpm --registry registry.npm.taobao.org install any-touch 临时修改
  • pnpm config set registry registry.npm.taobao.org 持久使用
  • pnpm config set registry registry.npmjs.org 还原

工具切换

常用命令

npmyarn功能
npm installyarn安装全部依赖
npm install react --saveyarn add react
npm uninstall react --saveyarn remove react移除依赖
npm install react --save-devyarn add react --dev
npm update --saveyarn upgrade
npm install react --globalyarn global add react
npm list -g --depth 0yarn global list --depth=0查看全局安装的包

npm全局包路径修改

bash
npm config get prefix npm config set prefix "/usr/local/Cellar/node@12/12.21.0_1"

设置代理

bash
npm config set proxy http://127.0.0.1:6152 npm config set https-proxy http://127.0.0.1:6152 yarn config set proxy http://127.0.0.1:6152 yarn confit set https-proxy http://127.0.0.1:6152 npm config delete proxy npm config delete https-proxy yarn config delete proxy yarn config delete https-proxy

更新项目依赖

bash
#yarn更新依赖 yarn upgrade-interactive --lates #更新所有依赖 npm update #执行以下命令不应有输出 npm outdated

更新npm

Monorepo支持

package.json

  • dependencies
  • devDependencies
  • peerDependencies

这三个字段在我们的业务项目中是没有什么区别的,主要区别是在开发npm包时候和node应用

dependencies

项目依赖,比如react

devDependencies

开发依赖,比如eslint

peerDependencies

peerDependencies 主要用于依赖包中,表示安装该包时还需要安装哪些包

版本号

  • ^主版本号不会变,另外两个版本号会更新到最新
  • ~主版本和次要版本不会变,最后一个版本号会更新到最新
  • 啥也没有:固定版本,不会更新

npm install发生了什么

主要步骤如下

  • 检查配置。包括项目级、用户级、全局级、内置的 .npmrc 文件。
  • 确定依赖版本,构建依赖树。确定项目依赖版本有两个来源,一是 package.json 文件,一是 lockfile 文件,两个确认版本、构建依赖树的来源,互不可少、相辅相成。如果 package-lock.json 文件存在且符合 package.json 声明的的情况下,直接读取;否则重新确认依赖的版本。
  • 下载包资源。下载前先确认本地是否存在匹配的缓存版本,如果有就直接使用缓存文件,如果没有就下载并添加到缓存,然后将包按依赖树解压到 node_modules 目录。
  • 生成 lockfile 文件。
  1. 构建依赖树的过程中,版本确认需要结合 package.json 和 package-lock.json 两个文件。先确认 package-lock.json 安装版本,符合规则就以此为准,否则由 package.json 声明的版本范围重新确认。特别地,若是在开发中手动更改包信息,会导致 lockfile 版本信息异常,也可能由 package.json 确认。确认好的依赖树会存到 package-lock.json 文件中,这里跟 yarn.lock 存在差异。
  2. 同一个依赖,更高版本的包会安装到顶层目录,即 node_modules 目录;否则会分散在某些依赖的 node_modules 目录,如:node_modules/expect-jsx/node_modules/react 目录。
  3. 如果依赖升级,造成版本不兼容,需要多版本共存,那么仍然是将高版本安装到顶层,低版本分散到各级目录。
  4. lockfile 的存在,保证了项目依赖结构的确定性,保障了项目在多环境运行的稳定性。
评论区

共有评论 0

暂无评论