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

一、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在本地首先会尝试找到当前目录下的根目录寻找[email protected]包。作用cd命令也能到相关目录。

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

    如果没有找到包的根目录,则使用当前文件夹。当您运行npm install [email protected],然后加载到包 缓存,然后打开./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直接取决于[email protected]和[email protected],它们安装在foo的node_modules文件夹中。即使blerg的最新副本是1.3.7,foo对版本1.2.5有特定的依赖。

    所以,安装在[A]。 由于父安装blerg满足bar对[email protected]的依赖,它不会在[B]下安装另一个副本。Bar [B]也依赖于baz和asdf,所以这些都安装在bar的node_modules文件夹中。

    因为它取决于[email protected],它不能重复使用安装在父节点node_modules文件夹[D]中的[email protected],并且必须安装自己的副本[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脚本在此处设置字段。 这主要用于分发维护者以标准和一致的方式重写默认配置。

时间: 2024-11-03 10:18:47

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

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/cacache/node_modules/ssri npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall access npm ERR! Error: EACCES: permission denied, access '/usr/loca

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

前几天写的直接运行npm run dev还是ok的,突然不行了,前面报错是css-loader没有,删除style标签上的lang='scss'就好了,先不需要这个依赖.这个先不管. 只是后面的 run `npm audit fix` to fix them, or `npm audit` for details,来回依据指令好几次,依然是这样.... 解决:运行 npm audit fix --force..npm install..貌似解决了 原文地址:https://www.cnblogs

[已解决]报错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 vulnerabilities (4 low, 6 moderate, 2 high, 1 critical) run `npm audit fix` to fix them, or `npm audit` for details 解决: npm audit fix --force 原文地址:https://www.c

修改npm的registry为淘宝镜像(npm.taobao.org)

来源:https://cnodejs.org/topic/4f9904f9407edba21468f31e 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在): 1.通过config命令 npm config set registry https://registry.npm.taobao.org npm info underscore (如果上面配置正确这个命令会有字符串response) 2.命令行指定 npm --registry https:/

[NPM] Test npm packages locally in another project using npm link

We will import our newly published package into a new project locally to make sure everything is working as expected. We can do this locally before publishing with npm link. This creates a symbolic link in our node_modules folder, so our unpublished

npm 6.0.0 版本npminstall报npm:write after end错误

这两个多月一直开发小程序,今天准备开发公众号,使用Vue-cli 脚手架搭建项目时候, npm install 就报错误,我就奇葩了!心里一万个曹尼玛....... 因为之前使用安装包的提示升级,自己就手动去升级了,经过百度了解,才知道是因为 npm 版本导致,我用node版本 8.9.3的,之前没有安装之前没有毛病, 按照把 npm 版本降到5.多就可以,我就下载 5.5.1的版本 npm 后,再 npm install 就完美解决这个坑爹的bug! 就安安静静的 npm run dev 完美

执行npm -install -g vue-cli 和 npm install -g cnpm --registry=https://registry.npm.taobao.org时保错

在安装vue淘宝镜像和命令行工具的时候,先进行淘宝镜像安装,安装完成后,再对命令行工具进行安装报错如下: 原因分析:代理地址问题 解决办法:首先清理掉之前异常的下载内容,使用指令:npm cache clean --force 然后修改代理:代理置空     npm config set proxy null npm config set https-proxy null 修改代理: npm config set registry http://registry.cnpmjs.org/ 再执行:

npm 在安装 Vue脚手架命令(npm install -g @vue/cli)时报错安装报错--“Unexpected end of JSON input while parsing near···”

在安装Vue的脚手架(npm install -g @vue/cli 项目名称)时,提示: Unexpected end of JSON input while parsing near 其实,但凡使用npm 时,只要提示这个,都可以按照以下几种方式进行尝试. 第一种:删掉package.lock.json 第二种:清除cache npm cache clean --force第三种:进入下面这个文件夹,把文件夹npm-cache下的内容删除掉(清除cache) 路径:C:/Users/DELL

*模块加载器、Node.js、NPM、Webpack基础汇总

--------------------------------NODE应用中的Node.js command prompt和Node.js--------------------------------------- ·安装node.js后,有两个可启动应用:黑色的Node.js command prompt和绿色的Node.js ·黑色的Node.js command prompt就和cmd DOS控制台一样,输入node -v后,若出现node的版本号,则表示当前node环境安装OK. ·