前端架构-01npm安装机制及企业级部署私服原理

215 阅读3分钟

npm内部机制与核心原理

npm的核心目标:给你、你的团队和你的公司带来最好的开源库

npm install的流程

  1. 解析 package.json:npm 读取项目根目录下的package.json文件。其中包含了项目所需的各种依赖包及其版本信息。
    • dependencies字段列出了项目运行所依赖的包。例如,"lodash": "^1.0.0"表示项目依赖lodash库,版本为1.0.0
    • devDependencies字段则包含了开发过程中需要的工具包,如"webpack": "^4.0.0"
  2. 确定依赖树:npm 根据package.json中的依赖关系构建依赖树。它会递归地检查每个依赖包及其依赖项,确保所有依赖都被正确安装。
    • 假设项目依赖A包,A包又依赖B包,B包依赖C包。npm 会将ABC包以及它们的依赖关系形成一棵依赖树。
    • 在这个过程中,可能会出现版本冲突。例如,A包依赖B包的某个版本,而B包的另一个版本被其他依赖包引用。 npm 会按照一定的规则来解决这些冲突,通常优先使用满足所有依赖的最新版本。
  3. 下载依赖:npm 从官方仓库(或指定的镜像源)下载所需的依赖包。
    • 它会根据依赖树的结构,依次下载每个包及其依赖项。例如,A包依赖B包,B包依赖C包,npm 会先下载C包,再下载B包,最后下载A包。
    • 下载过程中会显示进度条,告知用户下载的进度。
  4. 安装依赖:npm 将下载好的依赖包解压到项目的node_modules目录中。
    • 它会将每个包的文件和目录结构按照指定的位置进行解压和安装。例如,A包解压到node_modules目录下的A文件夹,B包解压到node_modules目录下的B文件夹。
    • 安装完成后,npm 会更新package-lock.json文件,记录安装的包版本以及依赖关系。

npm缓存机制

获取npm的缓存路径

npm config get cache

npm在Mac的缓存路径./npm/_cacache

在安装时会根据lock文件生成唯一的key,通过key,在缓存中查找,如果有则跳过网络下载步骤,如果没有,则进行下载。

npm在下载依赖时,会下载到_cacache里面,如果有则解压到node_modules中。

以上步骤是npm下载与缓存的基本原理。

npm实用小技巧

自定义 npm init

npm 支持自定义 npm init,通过prompt()方法,获取动态产出和用户输入内容。

可以写一个JS脚本,设置自定义npm初始化

npm config set init-module .npm-init.js

通过这个命令使用自定义的JS脚本,脚本内容可以这样设置

const desc = prompt('请输入项目描述', '项目描述')

module.exports = {
  key: 'value',
  name: prompt('name?', process.cwd().split('/').pop()),
  version: prompt('version?', '0.0.1'),
  description: desc,
  main: 'index.js',
  respository: prompt('github repository url', '', function (url) {
    if (url) {
      run('touch README.md');
      run('git init');
      run('git add README.md');
      run('git commit -m "first commit"');
      run('git remote add origin ${url}');
      run('git push -u origin master');
    }
    return url;
  })
}

自定义创建过程

也可以通过这种方式设置

npm config set init.author.name "Green Fred"
npm config set init.author.email "xxx@163.com"
npm config set init.author.url "gfred.com"
npm config set init.license "MIT"

网上说返回默认设置,删除JS文件就可以,但是实测不好使,我采用的方法是在配置一遍空的文件,也可以实现默认配置的目的。

私服npm

为了保证稳定性和私密性,可以设置内部源

npm config set registry https://xxxx //设置源

搭建自己的npm私有仓库

安装nexus

下载地址:help.sonatype.com/repomanager…

进入nexus目录下的bin下

./nexus start

创建私服npm库

创建npm(hosted)

创建npm(proxy)

创建npm(group)

npm创建安装失败的处理