We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
现在的前端工程化开发基本离不开npm,依托于其丰富的生态资源,可以让我们在实际的开发中减少很多麻烦,今天就来讨
现在的前端工程化开发基本离不开npm,依托于其丰富的生态资源,可以让我们在实际的开发中减少很多麻烦,今天就来讨论下我们最常用的指令npm install到底干了些什么
npm install
发出npm install命令
查询node_modules目录之中是否已经存在指定模块
若存在,不再重新安装
若不存在
输入 npm install 命令并敲下回车后,会经历如下几个阶段(以 npm 5.5.1 为例):
当前 npm 工程如果定义了 preinstall 钩子此时会被执行。
首先需要做的是确定工程中的首层依赖,也就是 dependencies 和 devDependencies 属性中直接指定的模块(假设此时没有添加 npm install 参数)。 工程本身是整棵依赖树的根节点,每个首层依赖模块都是根节点下面的一棵子树,npm 会开启多进程从每个首层依赖模块开始逐步寻找更深层级的节点。
获取模块是一个递归的过程,分为以下几步:
举个例子,假设一个依赖树原本是这样:
node_modules -- foo ---- lodash@version1
-- bar ---- lodash@version2
假设 version1 和 version2 是兼容版本,则经过 dedupe 会成为下面的形式:
node_modules -- foo
-- bar
-- lodash(保留的版本为兼容版本)
假设 version1 和 version2 为非兼容版本,则后面的版本保留在依赖树中:
node_modules -- foo -- lodash@version1
这一步将会更新工程中的 node_modules,并执行模块中的生命周期函数(按照 preinstall、install、postinstall 的顺序)。
当前 npm 工程如果定义了钩子此时会被执行(按照 install、postinstall、prepublish、prepare 的顺序)。
最后一步是生成或更新版本描述文件,npm install 过程完成。
参考sisterAn的回答
The text was updated successfully, but these errors were encountered:
No branches or pull requests
现在的前端工程化开发基本离不开npm,依托于其丰富的生态资源,可以让我们在实际的开发中减少很多麻烦,今天就来讨
写在前面
现在的前端工程化开发基本离不开npm,依托于其丰富的生态资源,可以让我们在实际的开发中减少很多麻烦,今天就来讨论下我们最常用的指令
npm install
到底干了些什么第 20 题:介绍下 npm 模块安装机制,为什么输入 npm install 就可以自动安装对应的模块?
1. npm 模块安装机制:
发出npm install命令
查询node_modules目录之中是否已经存在指定模块
若存在,不再重新安装
若不存在
2. npm 实现原理
输入 npm install 命令并敲下回车后,会经历如下几个阶段(以 npm 5.5.1 为例):
1. 执行工程自身 preinstall
2.确定首层依赖模块
3.获取模块
获取模块是一个递归的过程,分为以下几步:
4.模块扁平化(dedupe)
举个例子,假设一个依赖树原本是这样:
node_modules
-- foo
---- lodash@version1
-- bar
---- lodash@version2
假设 version1 和 version2 是兼容版本,则经过 dedupe 会成为下面的形式:
node_modules
-- foo
-- bar
-- lodash(保留的版本为兼容版本)
假设 version1 和 version2 为非兼容版本,则后面的版本保留在依赖树中:
node_modules
-- foo
-- lodash@version1
-- bar
---- lodash@version2
5.安装模块
这一步将会更新工程中的 node_modules,并执行模块中的生命周期函数(按照 preinstall、install、postinstall 的顺序)。
6.执行工程自身生命周期
当前 npm 工程如果定义了钩子此时会被执行(按照 install、postinstall、prepublish、prepare 的顺序)。
最后一步是生成或更新版本描述文件,npm install 过程完成。
参考sisterAn的回答
The text was updated successfully, but these errors were encountered: