了解npm的文件结构(npm-folders)和配置文件(npm-mrc)

1、npm的文件结构node

  npm的安装:git

    本地安装npm

    • 1. 将安装包放在 ./node_modules 下(运行 npm 命令时所在的目录),若是没有 node_modules 目录,会在当前执行 npm 命令的目录下生成 node_modules 目录。
    • 2. 能够经过 require() 来引入本地安装的包。

    全局安装json

    • 1. 将安装包放在 /usr/local 下或者你 node 的安装目录。
    • 2. 能够直接在命令行里使用。

    若是你但愿具有二者功能,则须要在两个地方安装它或使用 npm linkwindows

  node目录:数组

    安装目录默认为安装目录。缓存

    在windows中,默认node目录:/ usr / local。优化

    在Unix系统中,通常安装在{node目录} / bin /目录下而不是{安装目录} / node.exe目录下。ui

    全局安装目录:spa

      若设置了node目录,就安装到node目录下,

      若没设置node目录则安装到当前路径目录下

  Node_modules:

    在本地包在node_modules目录下能够按package名称进行加载主要模块,或按package名称/lib/path/to/sub/module目录加载其余模块。

  全局Node_modules:

    在Unix系统中{node目录} / lib / node_modules。

    在Windows中{node目录} / node_modules(即没有lib文件夹。

    包的做用域:node_modules文件夹的子文件夹名与@包有相关做用域。

    例如npm install @myorg/package将包放到/node_modules/@myorg/package目录下能看到全部范围的细节。

    若是须要引入对应的包可使用require() 引入到本地项目中。

  可执行文件:

    全局:Unix  / bin在目录下引用可执行文件,或在Windows的目录下引用可执行文件。

    本地:在/ node_modules /目录下引用可执行文件。能够经过npm脚本运行。

  手册页:

    全局:在{prefix}/share/man目录下.

    本地或windows不安装npm手册页。

  缓存:

    查看命令:npm-cache(1),参数由缓存配置参数配置

    缓存存放目录:在Posix npm的缓存文件存储在~ /。,或者在Windows~ / npm-cache。

  临时文件:

    临时文件默认存储在指定的文件夹中tmp配置,它的文件格式默认为TMPDIR,tmp,

    临时环境变量:在Unix中为/ tmp。

           在windows中为c:\ windows \ TEMP。

    为每一个运行程序目录下分配一个临时文件进行程序的记录相关临时信息。如程序的程序的运行、运行成功、运行错误、结束。

  更多信息:

    npm在本地首先会尝试找到当前目录下的根目录寻找foo@1.2.3包。做用cd命令也能到相关目录。

    npm将会从package.json文件或node_modules目录查找包。使用npm命令进行查找包或模块则被视为有效。(这种行为相似于git,使用git-folder进行运行工做目录。)

    若是没有找到包的根目录,则使用当前文件夹。当您运行npm install foo@1.2.3,而后加载到包 缓存,而后打开./node_modules/foo。 而后,任何 foo的依赖性也一样打开./node_modules/foo/node_modules/...

    在/ node_modules / bin目录文件中被依赖。因此必要时经过npm脚原本查找他们。  

  全球安装:若是全局配置被设置为true,那么npm将安装“globally”包。全局安装方式大体相同,但需使用上述"globally"目录。

  生命周期:

    系统模块循环使用模块时会在不一样的阶段查找node_modules目录,若是一个包存在node_modules目录的根目录上,则不会出如今当前位置。

    考虑上面的例子,若是在foo -> bar -> barz以外,因为barz依赖于bar,你会想目录结构应是:foo -> bar -> baz -> bar -> baz ...,然而目录结构倒是:foo/node_modules/bar/node_modules/barz,由于barz依赖于bar,你的目录结构要是:foo -> bar -> baz -> bar -> baz,当它调用("bar"),它会得到这个副本并代替foo/n ode_modules/bar。

    仅当在多个嵌套node_modules目录中安装彻底相同的版本时,才使用此快捷方式。 若是两个“a”包是不一样的版本,仍然存在a/ node_modules / b / node_modules / a目录。 然而没有屡次重复彻底相同的包,将老是防止无限回归。另外一个优化能够经过在本地化的“目标”文件夹下安装最高级别的依赖项。另外一个优化能够经过安装依赖在最高的层次上,在局部“目标”文件夹中。

    例如:如下这个依赖图:

    

    在这种状况下,咱们可能但愿这样的文件夹结构:

    

    由于foo直接取决于bar@1.2.3和baz@1.2.3,它们安装在foo的node_modules文件夹中。即便blerg的最新副本是1.3.7,foo对版本1.2.5有特定的依赖。

    因此,安装在[A]。 因为父安装blerg知足bar对blerg@1.x的依赖,它不会在[B]下安装另外一个副本。Bar [B]也依赖于baz和asdf,因此这些都安装在bar的node_modules文件夹中。

    由于它取决于baz@2.x,它不能重复使用安装在父节点node_modules文件夹[D]中的baz@1.2.3,而且必须安装本身的副本[C]。

    在bar下面,baz - > quux - > bar依赖建立一个循环。 然而,由于bar已经在quux的祖先[B],它不解压缩另外一个bar副本到该文件夹。

    在foo - > baz [D]下,quux的[E]文件夹树是空的,由于它对bar的依赖关系由安装在[B]的父文件夹副本知足。

    可使用npm ls查看依赖树的结构。

  项目发布:

  在发布npm node_modules文件夹中。若是任何物品没有bundledDependencies数组中,而后他们将不会包含在包tarball。容许维护人员在本地(dev依赖性)使用这个包来安装全部的依赖关系,但只有结集于那些没法找到其余地方的项目。

2、npm的配置文件

  描述:npm从命令行,环境变量和npmrc文件获取其配置设置。npm config命令可用于更新和编辑用户和全局npmrc文件的内容。

  配置文件介绍:

    项目配置文件(/path/to/my/project/.npmrc)
    用户配置文件(〜/ .npmrc)
    全局配置文件($ PREFIX / etc / npmrc)
    npm内置配置文件(/ path / to / npm / npmrc)

    全部npm配置文件都是key = value参数的格式化列表。 环境变量可使用$ {VARIABLE_NAME}替换。 例如:

    prefix = ${HOME}/.npm-packages

    加载这些文件中的每个配置选项,并按优先级顺序解析。 例如,userconfig文件中的设置将覆盖globalconfig文件中的设置。

    经过在键名称后面添加“[]”来指定数组值。 例如:

    key[] = "first value"

    key[] = "second value"

    注意:因为本地(每一个项目或每一个用户).npmrc文件能够包含敏感凭据,它们必须只能由您的用户账户读取和写入(即必须具备0600的模式),不然将被npm忽略! 

  项目配置文件:

    当在项目中本地工做时,项目根目录中的.npmrc文件(即node_modules和package.json的兄弟节点)将设置特定于此项目的配置值。

    请注意,这仅适用于您运行npm的项目的根。它在您的模块发布时没有任何效果。 例如,您不能发布强制本身在全局或其余位置安装的模块。

    此外,此文件不是在全局模式下读取,例如当运行npm install -g时。

  用户配置文件:$HOME/.npmrc(或userconfig参数,若是设置环境 或在命令行上)

  全局配置文件:$ PREFIX / etc / npmrc(或globalconfig参数,若是设置如上):该文件是key = value参数的ini文件格式化列表。 环境变量能够如上替换。

  内置配置文件:path / to / npm / itself / npmrc 这是一个不可更改的“内置”配置文件,npm在更新中保持一致。 使用npm附带的./configure脚本在此处设置字段。 这主要用于分发维护者以标准和一致的方式重写默认配置。

相关文章
相关标签/搜索