webpack - 在我的 webpack (nuxt) 项目中导入其他模块使用的模块
问题描述
我意识到导入第三方模块(即.vue 组件)内部使用的模块(例如moment.js)会生成一个模块是冗余的,因为导入了两次。
这是预期的行为还是我错过了什么?
如果重要的话,在 package.json 中的版本是完全一样的。
解决方案
行为是正确的。一般来说,Webpack 会遍历应用程序的依赖树(包括传递依赖,即依赖的依赖)。
此外,只要导致该依赖项的所有导入都解析到同一个文件,webpack 就会确保它只打包某个依赖项一次。此行为仅在以下情况下发生变化:
- 您的代码或 node_modules 中有符号链接(或快捷链接)。
- 您有相同依赖项的多个版本。
- 意外的大写/小写字母更改会导致不同的文件(有时,在 Linux 上构建不区分大小写的 Windows 上编写的代码时会发生这种情况,反之亦然。)
- 在极少数情况下,如果您使用动态导入,Webpack 有时无法确定确切的依赖关系。
您可以使用 Webpack 分析器来找出捆绑包中的此类异常。此外,您还可以使用 Webpack解析功能来指导 Webpack 永远不要两次打包类似的依赖项(仅按补丁号左右延迟)。
推荐阅读
- ruby-on-rails - 将 Bootstrap 样式添加到 Acts_as_taggable_on tag_list 中的单个标签
- python - 如何在 Python 中使用列表而不是多个变量
- shell - shell 脚本中的 if 和 && 概念
- javascript - .push() 值到 JavaScript 数组 (n) 次使用 .fill()?
- javascript - 处理多个页面上的事件监听器
- html - 如何从外部href为嵌入iframe的网站加载特定部分?
- javascript - 为什么我的所有文件路径都被 innerHTML 破坏了?
- java - Java/Spring - 对象引用未保存的瞬态实例
- r - 创建新列联表时,for循环仅运行最后一次迭代
- ruby-on-rails - Rails 5:模型的嵌套属性没有更新