Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在前端项目中使用npm时避免捆绑包中的重复模块_Javascript_Npm_Webpack_Browserify - Fatal编程技术网

Javascript 在前端项目中使用npm时避免捆绑包中的重复模块

Javascript 在前端项目中使用npm时避免捆绑包中的重复模块,javascript,npm,webpack,browserify,Javascript,Npm,Webpack,Browserify,Npm允许在一个项目中使用同一软件包的多个版本。这是一个强大的功能 然而,在大多数前端项目中,我认为不希望在不同版本中对同一个库有依赖关系 在不同版本中依赖同一个库意味着最终用户必须多次加载给定的库(作为单独的请求或更大的捆绑包的一部分) 但是,如果使用npm来管理前端项目的依赖关系,那么很快就会在不同版本的同一个库中产生依赖关系 我认为在大多数情况下,这是不必要的,而且大多数时候我们甚至不知道情况 一个简单的例子,我们在这种情况下结束: 在某个时间点,您可以在项目中安装react router

Npm允许在一个项目中使用同一软件包的多个版本。这是一个强大的功能

然而,在大多数前端项目中,我认为不希望在不同版本中对同一个库有依赖关系

在不同版本中依赖同一个库意味着最终用户必须多次加载给定的库(作为单独的请求或更大的捆绑包的一部分)

但是,如果使用npm来管理前端项目的依赖关系,那么很快就会在不同版本的同一个库中产生依赖关系

我认为在大多数情况下,这是不必要的,而且大多数时候我们甚至不知道情况

一个简单的例子,我们在这种情况下结束:

在某个时间点,您可以在项目中安装
react router
history

npm i -S react-router@1.0.0-rc1
npm i -S history@1.17.0   
当时,
react路由器
依赖于
history@1.17.0
。因此,作为一个整体,您的项目只依赖于此版本的
历史记录

稍后,您决定升级到最新版本的
react router

npm i -S react-router@2
现在,
react路由器
依赖于
history@2

因此,您的项目现在依赖于
history@1.17.0
和对
history@2

历史记录的两个版本都包含在您的
npm\U模块中

如果您使用的是Webpack或Browerify之类的模块绑定器,那么最终会得到一个包含
历史记录
两个版本的绑定

很可能你没有注意到。但是如果您注意到,您可能会将您的直接依赖项升级为`history@2.

我们如何处理这个问题

如何确定前端项目是否依赖于不同版本的同一库?

我们如何避免最终的捆绑包比它们应该的要大?

我知道从技术上讲,npm/Webpack/Browserify在捆绑包中包含对同一个库的不同版本的依赖关系是正确的。但我正在寻找一种方法,使其易于看到这一情况的发生,以便开发人员可以采取步骤优化依赖关系

我还重新创建了这个repo中的示例:

该工具可用于检查
节点_modules
目录,并报告具有多个版本的包


我想在
节点(modules
)级别解决这个问题是有意义的,因为这样做在WebPack和Browserify两种情况下都有效。

我试图
在一个非平凡的项目上找到重复的依赖项
,很难理解它报告的所有输出。我认为主要的问题是,我们也有通过npm管理的开发依赖项。而且,重复的可传递依赖关系并不是一个真正的问题。如果
find duplicate dependencies
的范围仅限于依赖项,而忽略dev-dependencies,那就太好了。另外,
find duplicate depencidencies
似乎不是一个广泛使用的工具(也不是在积极开发中)。我想知道其他项目是如何处理这个问题的。。。为什么没有一个“最先进的”解决方案,即一些网页教程中提到的解决方案?你的观点都是有效的,我同意你的观点。不久前,我编写了自己的工具来解析和分析我的Browserify包。在阅读了你的问题后,我想分析
node_模块
应该有一些优点,然后快速搜索找到了这个工具。如果没有别的,也许这是一个起点?希望已经有人做了。