一、npm的文件结构

  npm的安装:

    本地安装

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

    全局安装

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

    如果你希望具备两者功能,则需要在两个地方安装它或使用 npm link

  node目录:

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

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

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

    全局安装目录:

      若设置了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依赖性)使用这个包来安装所有的依赖关系,但只有结集于那些无法找到其他地方的项目。

二、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脚本在此处设置字段。 这主要用于分发维护者以标准和一致的方式重写默认配置。

了解npm的文件结构(npm-folders)和配置文件(npm-mrc)的更多相关文章

  1. npm 使用过程中报错问题-及npm使用

    原文地址:https://blog.csdn.net/u013022210/article/details/77740519 1.以下为报错具体详情:node 8.1.2 版本问题:其他空间安装成功但 ...

  2. found 12 vulnerabilities (7 moderate, 5 high) run `npm audit fix` to fix them, or `npm audit` for details

    npm 安装包之后,如果出现类似下面的信息 found 12 vulnerabilities (7 moderate, 5 high) run `npm audit fix` to fix them, ...

  3. npm run dev 报错 run `npm audit fix` to fix them, or `npm audit` for details

    前几天写的直接运行npm run dev还是ok的,突然不行了,前面报错是css-loader没有,删除style标签上的lang='scss'就好了,先不需要这个依赖.这个先不管. 只是后面的 ru ...

  4. run `npm audit fix` to fix them, or `npm audit` for details

    问题 added 246 packages from 681 contributors and audited 382 packages in 17.509s found 13 vulnerabili ...

  5. Nodejs的npm安装模块时候报错:npm ERR! Error: CERT_UNTRUSTED的解决方法

    npm http GET https://registry.npmjs.org/grunt-cli npm http GET https://registry.npmjs.org/grunt-cli ...

  6. npm ERR! path: '/usr/local/lib/node_modules/npm/node_modules/cacache/node_modules/ssri' }

    在安装appium 或者升级npm的过程中会遇到这个问题.出错时的代码提示如下: npm ERR! path /usr/local/lib/node_modules/npm/node_modules/ ...

  7. npm install -g cnpm --registry=https://registry.npm.taobao.org

    npm install -g cnpm --registry=https://registry.npm.taobao.org

  8. [NPM] Create a new project using the npm init <initializer> command

    Historically, the npm init command was solely use to create a new package.json file. However, as of ...

  9. Mac 安装node npm cnpm vue 以及卸载 node 和 npm 的方法 清空npm缓存的方法

    S01 安装node(内含npm) 首先,到官网下载长期支持版,截止目前,最新的长期支持版本号是10.16.3 https://nodejs.org/zh-cn/download/ 下载完毕后,安装该 ...

随机推荐

  1. U3D DrawCall优化手记

    在最近,使用U3D开发的游戏核心部分功能即将完成,中间由于各种历史原因,导致项目存在比较大的问题,这些问题在最后,恐怕只能通过一次彻底的重构来解决 现在的游戏跑起来会有接近130-170个左右的Dra ...

  2. AngularJS 第三天----作用域

    作用域的概念及其功能 AngularJS使用作用域的概念来充当数据模型的作用,在视图和控制器之间起着桥梁的作用.由于双向绑定的数据特性,视图的修改会更新 $scope,同样对 $scope的修改也会重 ...

  3. EasyPR--开发详解(7)字符分割

    大家好,好久不见了. 一转眼距离上一篇博客已经是4个月前的事了.要问博主这段时间去干了什么,我只能说:我去“外面看了看”. 图1 我想去看看 在外面跟几家创业公司谈了谈,交流了一些大数据与机器视觉相关 ...

  4. 一文搞懂HMM(隐马尔可夫模型)

    什么是熵(Entropy) 简单来说,熵是表示物质系统状态的一种度量,用它老表征系统的无序程度.熵越大,系统越无序,意味着系统结构和运动的不确定和无规则:反之,,熵越小,系统越有序,意味着具有确定和有 ...

  5. Atitit HTTP 认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结

    Atitit HTTP认证机制基本验证 (Basic Authentication) 和摘要验证 (Digest Authentication)attilax总结 1.1. 最广泛使用的是基本验证 ( ...

  6. jQuery 插件-(初体验一)

    1.jquery有2个扩展方法: jquery.fn.extend=jquery.prototype.extend jquery.extend (两者的区别放在后面文章说) 2.具体实例结构: //创 ...

  7. Chrome浏览器Cookie解密

    做过 web 开发的都知道:浏览器会把重要的认证登录认证信息存放到 cookie 中,在 cookie 有效期内,再次访问这个网站的时候就可以直接从 cookie 中获取到登录信息,这样就可以实现自动 ...

  8. ASP.NET MVC5+EF6+EasyUI 后台管理系统(33)-MVC 表单验证

    系列目录 注:本节阅读需要有MVC 自定义验证的基础,否则比较吃力 一直以来表单的验证都是不可或缺的,微软的东西还是做得比较人性化的,从webform到MVC,都做到了双向验证 单单的用js实现的前端 ...

  9. ITTC数据挖掘平台介绍(四) 框架改进和新功能

    本数据挖掘框架在这几个月的时间内,有了进一步的功能增强 一. 超大网络的画布显示虚拟化     如前几节所述,框架采用了三级层次实现,分别是数据,抽象Node和绘图的DataPoint,结构如下:   ...

  10. ITTC数据挖掘平台介绍(七)强化的数据库, 虚拟化,脚本编辑器

    一. 前言 好久没有更新博客了,最近一直在忙着找工作,目前差不多尘埃落定.特别期待而且准备的都很少能成功,反而是没怎么在意的最终反而能拿到,真是神一样的人生. 言归正传,一直以来,数据挖掘系统的数据类 ...