我刚刚发布了我的第一个 npm 包。当我将包作为依赖项安装在项目中时,我打开 node_modules 中的项目文件夹,发现它还有一个包含一个包的 node_modules 文件夹,文件夹中为
history
。我的项目没有任何常规依赖项,只有 devDependency,所以我不明白为什么会发生这种情况?您可以查看我的 package.json 文件并尝试从此处的 github 页面安装模块https://github.com/danielyaa5/react-contextulize
在许多情况下运行
npm install
will 安装 devDependencies
。
尝试在生产模式下显式安装:
npm install --only=production
这是一个相关答案,包含更多信息。
当您安装 npm 包作为另一个模块的依赖项时,npm 会将该包及其依赖项安装在依赖模块的 node_modules 文件夹中。这是 npm 如何管理依赖项的一个基本方面。
以下是所发生情况的详细说明:
依赖解析: 当您在 package.json 文件中指定包作为依赖项时,npm 会确定该包的版本及其与您的项目兼容的依赖项。此信息存储在node_modules文件夹中。
依赖安装: npm 将指定的包及其依赖项安装在项目的 node_modules 文件夹中。每个依赖项在 node_modules 中都有自己的文件夹。
范围依赖项: 如果您的包有自己的依赖项,它们将安装在包文件夹内的嵌套 node_modules 文件夹中。这确保每个包都可以拥有自己独立的一组依赖项,而不会与其他包的依赖项发生冲突。
扁平结构与嵌套结构: 默认情况下,npm 尝试保持扁平结构,这意味着它尝试将所有依赖项安装在顶层的单个 node_modules 文件夹中。然而,在某些情况下,由于依赖冲突,嵌套结构是不可避免的。
包中的node_modules文件夹可能包含包正常运行所需的依赖项。
打包脚本: 某些 npm 软件包可能包含在安装过程中执行的脚本。这些脚本可能会执行额外的设置或配置。
总之,当作为依赖项安装时,包中的 node_modules 文件夹包含包在依赖模块的上下文中正常运行所需的依赖项。封装每个模块的依赖关系以避免冲突并确保清晰的依赖关系树是一种标准做法。