官方文档:docs.npmjs.com/files/folde…node
Unixnpm
npm install -g package # -> `{prefix}/lib/node_modules/package`
# 为可执行文件在 `{prefix}/bin/` 目录中建立连接
复制代码
Windows: {prefix}/node_modules/
json
npm install -g package # -> `{prefix}/node_modules/package`
# 为可执行文件在 `{prefix}/` 目录中建立连接
复制代码
prefix: docs.npmjs.com/misc/config…bash
当执行 npm install foo@1.2.3
时:spa
npm 从当前工做目录开始,在目录树中向上(父目录方向)查找:code
直到找到一个包含 package.json 文件或者 node_modules 目录的目录,则以该目录为 package_root
,并中止查找。递归
若是没有找到包含 package.json 文件或者 node_modules 目录的目录,则以当前工做目录为 package_root
。文档
安装 foo 包get
将 foo 包的内容拷贝到 {package_root}/node_modules/foo
。class
在 {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 包,假设安装 @myorg/foo@1.2.3
,与安装非 scoped 包 foo@1.2.3
相比,只是在 foo
和 node_modules
中间多了一层 @myorg
目录:
npm install foo@1.2.3
-> .../node_modules/foo
npm install @myorg/foo@1.2.3
-> .../node_modules/@myorg/foo