首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么我的npm包的所有文件都安装在node_modules中?

npm是JavaScript的包管理工具,用于在项目中安装、管理和共享代码模块。当你使用npm安装包时,这些包的文件都会被下载并存储在项目的node_modules目录中。这种设计有以下几个优点:

  1. 隔离性:将每个包的文件都放在自己的目录中可以确保不同的包之间不会发生冲突,避免了不同包之间相同文件的命名冲突问题。
  2. 可移植性:将包的文件放在项目的特定目录中,使得你可以轻松地将整个项目复制、移动到其他机器上,而无需手动安装各个包。
  3. 版本管理:node_modules目录还用于存储项目所依赖的包的不同版本。通过将每个包的文件都放在单独的子目录中,npm可以有效地管理和跟踪项目所使用的每个包的版本。
  4. 依赖解析:npm使用package.json文件来记录项目所依赖的包及其版本信息。通过将包的文件放在node_modules目录中,npm可以根据package.json中的依赖关系自动解析和安装所需的包。

总之,将npm包的所有文件安装在node_modules目录中有助于管理项目的依赖关系、版本控制和移植性。这种设计使得开发者可以更轻松地使用和共享代码模块,提高开发效率。腾讯云提供了云计算相关的产品和服务,如云服务器、对象存储、容器服务等,可供开发者在云上部署和管理自己的应用。你可以访问腾讯云官网(https://cloud.tencent.com/)了解更多详情。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

npm 依赖管理中被忽略的那些细节

接下来,本文将针对 npm 中的你可能忽略的细节和大家分享一些经验。 npm 安装机制 A 和 B 同时依赖 C,C 这个包会被安装在哪里呢?C 的版本相同和版本不同时安装会有什么差异呢?.../node_modules 这层目录中包含有我们 package.json 文件中所有的依赖包,而这些依赖包的子依赖包都安装在了自己的 node_modules 中 ,形成类似于下面的依赖树: 这样的目录有较为明显的好处...: 1)层级结构非常明显,可以清楚的在第一层的 node_modules 中看到我们安装的所有包的子目录; 2)在已知自己所需包的名字以及版本号时,可以复制粘贴相应的文件到 node_modules 中...为什么会出现 package-lock.json 呢? 为什么会有 package-lock.json 文件呢?这个我们就要先从 package.json 文件说起了。...中 dependencies 的依赖项相同 dependencies :结构和外层的 dependencies 结构相同,存储安装在子依赖 node_modules 中的依赖包 需要注意的是,并不是所有的子依赖都有

2.6K10

从 vue-cli 源码中,我发现了27行读取 json 文件有趣的 npm 包

同时我之前看到了vue-cli 源码 里有 read-pkg 这个包。源码仅27行,非常值得我们学习。 阅读本文,你将学到: 1. 如何学习调试源码 2....环境准备 3.1 克隆 # 推荐克隆我的项目,保证与文章同步 git clone https://github.com/lxchuan12/read-pkg-analysis.git # npm i -...用最新的VSCode 打开项目,找到 package.json 的 scripts 属性中的 test 命令。鼠标停留在test命令上,会出现 运行命令 和 调试命令 的选项,选择 调试命令 即可。...等等 read-pkg 源码[23] 整体而言相对比较简单,但是也有很多可以学习深挖的学习的知识点。 作为一个 npm 包,拥有完善的测试用例。...学 Node.js 可以多找找简单的 npm 包学习。比直接看官方文档有趣多了。不懂的就去查官方文档。查的多了,自然常用的就熟练了。

3.9K10
  • NPM的应用

    我们在本地项目中,安装的模块都在node_modules文件目录下,所以这个文件会很大!!...跑环境:按照package.json中的依赖清单,把模块安装一遍「指定版本的」 $ npm i  把开发和生产依赖都安装一遍 $ npm i --production 只安装生产依赖 容易出现的问题:...1项目目录不能用中文和特殊符号命名,否则 $ npm init -y 就会报错 2当前项目目录的所有祖先级目录中,不要出现node_modules,否则安装的模块,可能安装到祖先的node_modules...中 ================= $ npm i xxx -g(--global) 把模块安装在全局 安装在全局 VS 安装在本地 1.安装在全局可以使用命令,但是不能在项目代码中导入,而且多个项目使用相同的版本...,可能导致版本冲突 $ npm root -g 查看安装在全局的目录 2.安装在本地,不能直接使用命令,但是可以在项目中导入,而且也不用担心版本冲突 npm安装模块比较慢 原因1:安装过程是迭代进行的

    16310

    开发中遇到过的 NPM 疑惑解答

    为什么有的命令写在package.json中的script中就可以执行,但是通过命令行直接执行就不行? 为什么需要package-lock.json文件?...package-lock.json文件的作用就是锁定当前的依赖安装结构,与node_modules中下所有包的树状结构一一对应。...(不是所有的包都有,当子依赖的依赖版本与根目录的node_modules中的依赖冲突时,才会有) 通过分析上面的package-lock.json文件,也许会有一个问题。...为什么有的包可以被安装在根目录的node_modules中,有的包却只能安装在自己包下面的node_modules中?这就涉及到npm的安装机制。...C依赖了D@2,安装D@2时,因为npm不允许同层存在两个名字相同的包,这样就与跟目录node_modules的D@1冲突,所以会把D@2安装在C自己的node_modules中。

    1.5K10

    Node.js安装与基本使用

    jquery 方式2:安装指定的包以及指定的版本 npm install @ 需要的资源包,将下载到当前项目的node_modules文件夹下                ...1.5.2基于package.json安装 步骤一:初始化项目,自动创建package.json文件 npm init -y 步骤二:下载资源,并保存到package.json文件中 npm...package-lock.json文件中记录着整个项目所有组件的依赖树。...也就是保存node_modules中的所有包信息(版本,下载地址 等)                 1.5.4常见参数 参数以及省略写法 描述 -global=-g 全局安装,安装后的包位于系统预设目录下...                1.6.3全局安装 npm install -g 全局安装在一个特定的文件夹下                 1.6.4全局卸载 npm

    1.1K40

    从 node 到 python

    一 包管理 · pipenv npm 是 node.js 官方绑定的包管理工具,而 python 中对应的是 pip 。...但是,使用 npm 若不指定 -g 参数全局安装,则默认都安装在当前项目的 node_modules 下,这种依赖包管理按项目隔离区分的方式其实是非常方便的。...但是 pip 坑爹的是并没有类似于 node_modules 依赖包统一入口,除非 pip install 时通过 --target 参数手动指定安装目录,另外记录依赖包信息的 requirements.txt...其他依赖包也是通过 install 命令安装,所有包信息都将会记录在 Pipfile 和 Pipfile.lock 文件中,类似于 package.json 和 package-lock.json 。...本文的内容就是这么多了,写下这篇文章的时候,我还在从杭州到武汉回家的火车上,身处于恶心的泡面味和烦人的小孩啼哭声夹杂的环境中。虽长路漫漫,愿我心亦能坚定如初。

    1.1K10

    精读《pnpm》

    而带来这些优势的点子,全在官网上的这张图上: 所有 npm 包都安装在全局目录 ~/.pnpm-store/v3/files 下,同一版本的包仅存储一份内容,甚至不同版本的包也仅存储 diff 内容。...每个项目的 node_modules 下有 .pnpm 目录以打平结构管理每个版本包的源码内容,以硬链接方式指向 pnpm-store 中的文件地址。...每个项目 node_modules 下安装的包结构为树状,符合 node 就近查找规则,以软链接方式将内容指向 node_modules/.pnpm 中的包。...为什么是三层,而不是两层或者四层呢?...正因为这三层寻址的设计,使得第一层可以仅包含 package.json 定义的包,使 node_modules 不可能寻址到未定义在 package.json 中的包,自然就解决了幻影依赖的问题。

    93520

    NPM基本介绍(一)

    ,所以我们这里就什么理解自定义模块的查找方式中的路径生成规则,为什么你的require(包名)就能够将这个包require进来使用。...npm install发生了什么 官方安装文档 3、全局安装和局部安装 按照位置来区分: 全局安装是安装在:/c/Users/用户名/AppData/Roaming/npm/node_modules 局部安装是安装在...(缓存目录) 解压压缩包到当前项目的node_modules目录 运行npm install首先会判断项目文件夹node_modules中有没有对应的模块,没有直接去远程下载,然后保存在缓存中,将缓存中的压缩包解压至对应的项目的...package.json文件,可以添加-y | --yes 参数则默认所有配置为默认yes npm root -g:查看全局安装地址 npm run:列出项目所有脚本命令参数, npm uninstall...npm与yarn缓存对比 为什么我不使用shrinkwrap(lock) pnpm介绍 三大包管理进行对比

    1.6K20

    2018 年了,你还是只会 npm install 吗?

    3. npm install 如何工作 —— node_modules 目录结构 npm install 执行完毕后,我们可以在 node_modules 中看到所有依赖的包。...而每一个包都有自己的依赖包,每个包自己的依赖都安装在了自己的 node_modules 中。依赖关系层层递进,构成了一整个依赖树,这个依赖树与文件系统中的文件结构树刚好层层对应。...——在我们的示例中就有这个问题,webpack 和 nconf 都依赖 async 这个包,所以在文件系统中,webpack 和 nconf 的 node_modules 子目录中都安装了相同的 async.../node_modules/.bin/ 目录添加到执行环境的 PATH 变量中,因此如果某个命令行包未全局安装,而只安装在了当前项目的 node_modules 中,通过 npm run 一样可以调用该命令...正如上一节所说,npm run 命令在执行时会把 ./node_modules/.bin 加入到 PATH 中,使我们可直接调用所有提供了命令行调用接口的依赖包。

    6.6K160

    【Npm原理】Npm 执行命令中的环境变量

    下面我们分四个步骤来详细总结一下 npm 的命令行存放位置 npm 命令添加过程 npm 命令执行过程 项目本地安装是否必要 npm 命令行包存放位置 npm 中所有可供调用的命令行包 存放在 项目根目录的...而 window 下 npm run 调用的也是这个 cmd 文件 npm 命令添加过程 npm 在 执行 install 时,会分析每个依赖包的 package.json 中的 bin 字段,并将包含的命令安装到.../node_modules/.bin 目录中 我们 现在来添加一下自己的包,来测试一下 在 自己创建的包的 package.json 中,给 bin对象 添加一个键值对 配置格式 如下: 命令名称:入口执行文件...执行 npm install file:./npm-install-test 为什么这么做,可以参考我的另一篇文章 【npm】简化本地文件引用路径 ?.../node_modules/.bin/ 目录添加到执行环境的 PATH 变量中 如果有些命令没有全局安装,只安装在了 当前项目的 node_modules 中 那么使用 npm run 一样可以调用命令

    4.5K20

    使用NPM

    然后 npm install express安装 会出现node_modules文件夹 ? node_modules文件夹就是所有包安装的位置。...他是一个文件,他可以记住所有安装的包的信息,包括名称、版本信息。 如果我们迁移项目,我们就能够知道安装了什么包。...因为node_modules目录中文件比较大,而且不放在版本控制中(github等),也不是源码的一部分,我们只要知道node_modules里安装的一些包的名字就可以了,根本不需要这个目录的内容。...package.json就是记录所有安装的包的信息的文件。 生成方法 运行npm init初始化一个项目。...如果我直接在命令行里输入http-server,那么会访问到/usr/local/bin这个路径里的http-server文件 如果只安装在了局部的项目里,想用的话就去当前目录下去找http-server

    1.1K30

    lerna最佳实践

    package 的 node_modules 中,只有依赖版本号一致的时候才会提升到顶层,而 lerna 会进到每个 package 中执行 yarn/npm install,因此会在每个 package...这类包一般都是一些开发依赖,比如将 ts 代码转换成 es5 代码或者一些代码校验工具等。通过这种方式安装的依赖包是装在根目录下的 node_modules 中。...给所有的 package 都安装依赖 比如如果想给每个 package 都安装一个 lodash 包,就可以使用 yarn workspace add lodash 给每个 package 都安装 lodash...,表示暂存区,lint-staged 表示只检查暂存区中的文件。...lerna puplish lerna publish 的时候会做以下操作: 找出从上一个版本发布以来有过变更的 package 提示开发者确定要发布的版本号 将所有更新过的的 package 中的 package.json

    1.9K20

    一文全面了解pnpm、yarn、cnpm、npx、npm的使用(强烈建议收藏)

    可靠:使用详细但简洁的锁定文件格式和确定性的安装操作算法,Yarn能够保证在一个系统上运行的任何安装在另一个系统上将完全相同。 安全:在执行代码之前,Yarn使用校验和来验证每个安装包的完整性。...所有文件都会存储在硬盘上的某一位置。当软件包被被安装时,包里的文件会硬链接到这一位置,而不会占用额外的磁盘空间。这允许你跨项目地共享同一版本的依赖。...默认情况下,任何新软件包都安装为生产依赖项。...从 node_modules 和项目的 package.json 中删除相关 packages。...精华文章 新一代包管理工具 pnpm 使用心得 https://zhuanlan.zhihu.com/p/546400909 关于现代包管理器的深度思考——为什么现在我更推荐 pnpm 而不是 npm

    5.6K31

    使用 pnpm 构建 Monorepo 项目

    在 root package.json 中的 deps 是所有子 package 共用的。...pnpm 相比 yarn,npm,yarn PnP 安装包更快速,对包的依赖管理更偏平,对磁盘占用也有优势。 具体可以参考这篇文章: 为什么现在我更推荐 pnpm 而不是 npm/yarn?...为什么要使用 monorepo 使用 monorepo 可以把原本一个项目的多个模块拆分成多个 packages,在 packages 之间相互引用,也可以单独发布成包,极大地解决了项目之间代码无法重用的痛点...sh 1pnpm install react react-dom -w COPY 注意这里使用 -w 表示把包安装在 root 下,该包会放置在 /node_modules 下。...当然也可以把把安装在所有 packages 中,使用 -r 代替 -w。你必须使用其中一个参数。

    3.9K10

    Vue学习笔记之Nodejs中的NPM使用

    0x00 NPM是什么 ? ? 简单的说,npm就是JavaScript的包管理工具。类似Java语法中的maven,gradle,python中的pip。 0x01 NPM安装 傻瓜式的安装。...为了避免环境变量出现额外的问题,winodows用户将nodejs统一安装在c盘中,mac电脑直接安装。...ok,到目前为止,我们的软件都安装好了。 既然我们知道npm它能够管理我们的包,也就是我们所谓的模块。 那么,比如在之前我们使用到的jquery框架,bootstrap框架。...都可以使用npm去下载了。 0x02 NPM安装包 我们在桌面上创建一个文件夹/01-studyNpm。 注意:千万不要起名成:node、npm这样的文件夹,以免与系统软件产生不必要的冲突。...执行以上命令,便可以安装对应的包到执行命令的当前目录,并创建一个node_modules的文件夹,然后把需要安装的安装包下载到里面。 打开package.json文件会发现: ?

    99240

    最高性能的包管理器-pnpm

    pnpm 默认创建了一个非平铺的 node_modules,因此代码无法访问任意包 npm 和 yarn 包管理机制 npm@3 之前 采用的是一种嵌套安装的方式。...幻影依赖指的是 node_modules 中的依赖包在没有 package.json 中声明的情况下使用了其他包的依赖 依赖结构的不确定性。这里为什么是 D@2.0.0 提升,而不是 D@10.0?...node_modules 中 node_modules 中只有直接依赖的包,而没有间接依赖的包。...Store pnpm在全局通过Store来存储所有的 node_modules 依赖,并且在 .pnpm 中存储项目的hard links 在使用 pnpm 对项目安装依赖的时候,如果某个依赖在 sotre...pnpm/bar@1.0.0/node_modules/bar@1.0.0 又通过硬链接指向 Store bar@1.0.0 依赖的foo@1.0.0 会安装在跟自己的同一级,这里的设计,我理解是根据

    1.7K20

    如何使用 npm 执行本地安装 npm 包里的二进制文件

    全局安装:当你使用 npm install -g package-name 命令时,这个包会被安装到你的全局 node_modules 目录中,并且它的二进制文件会被放置到全局 bin 目录中。...当你执行 npm install package-name(不带 -g 参数)时,包会被安装到当前项目的 node_modules 目录中,而对应的二进制文件会被放置到 node_modules/.bin...你可以在这些脚本中直接调用安装在项目中的 npm 包的二进制文件,而无需指定完整路径。...为什么使用本地安装的 npm 包?使用本地安装的 npm 包有几个显著的优势:项目隔离:每个项目可以有自己的依赖包和版本,确保不同项目之间的依赖不会冲突。...这在开发多个项目时非常重要,因为不同项目可能需要不同版本的同一包。版本一致性:通过本地安装,你可以确保团队中的所有成员使用相同版本的依赖包。这有助于避免由于依赖包版本不一致而导致的问题。

    13310

    2015年至今,包管理器与node_modules都发生了什么?

    node_modules对做web领域开发的前端同学们可能都不陌生,不知道大家在平时有没有遇到过npm包的依赖地狱问题,或者是想看看node_modules中的代码时被复杂的目录结构劝退的情况。...module_C 其实很容易理解,只有直接依赖于项目的包才会放在node_modules的直接目录中。...node_modules module_D module_B module_C module_D 此时在npmv3的版本中,module_D ^2.0.0被安装在了父级目录中...所以从目前来看,pnpm的符号链接我认为似乎是最合理的方式,通过一个引用符号,指向具体的依赖包,那么为什么npm v3或者yarn当时没有选择采用这样的方式呢? 难道因为windows的路径字符限制?...当包管理器创建node_modules时,会从缓存中复制一大堆文件,这是安装慢的主要原因。

    21640
    领券