官方文档:docs.npmjs.com/files/folde…
全局包安装位置
-
Unix
npm install -g package # -> `{prefix}/lib/node_modules/package` # 为可执行文件在 `{prefix}/bin/` 目录中创建链接 -
Windows:
{prefix}/node_modules/npm install -g package # -> `{prefix}/node_modules/package` # 为可执行文件在 `{prefix}/` 目录中创建链接
prefix: docs.npmjs.com/misc/config…
局部包安装位置
当执行 npm install foo@1.2.3 时:
-
npm 从当前工作目录开始,在目录树中向上(父目录方向)查找:
-
直到找到一个包含 package.json 文件或者 node_modules 目录的目录,则以该目录为
package_root,并停止查找。 -
如果没有找到包含 package.json 文件或者 node_modules 目录的目录,则以当前工作目录为
package_root。
-
-
安装 foo 包
-
将 foo 包的内容拷贝到
{package_root}/node_modules/foo。 -
在
{package_root}/node_modules/.bin/下创建相关可执行文件的链接。
-
-
安装 foo 包的依赖包
假设 foo 包依赖
bar@1.2.3-
如果
{package_root}/node_modules/中已经安装了bar@1.2.3,则不再安装bar@1.2.3。 -
如果
{package_root}/node_modules/中已经安装了与bar@1.2.3不同版本的 bar 包,则在{package_root}/node_modules/foo/node_modules/目录中安装bar@1.2.3。 -
如果
{package_root}/node_modules/中还没有安装任何版本的 bar 包,则在{package_root}/node_modules/中安装bar@1.2.3。
-
-
按 (3) 中的方法递归安装依赖包的依赖包。
scoped 包安装位置
对于 scoped 包,假设安装 @myorg/foo@1.2.3,与安装非 scoped 包 foo@1.2.3 相比,只是在 foo 和 node_modules 中间多了一层 @myorg 目录:
npm install foo@1.2.3->.../node_modules/foonpm install @myorg/foo@1.2.3->.../node_modules/@myorg/foo