在我的 webpack (nuxt) 项目中导入其他模块使用的模块
Import a module used by other module in my webpack (nuxt) project
我意识到导入第三方模块(即 .vue 组件)内部使用的模块(例如 moment.js)会生成一个模块冗余的构建,因为导入了两次。
这是预期的行为还是我遗漏了什么?
在 package.json 中,如果重要的话,版本完全相同。
行为正确。通常,Webpack 将遍历应用程序的依赖关系树(包括传递依赖关系,即依赖关系的依赖关系)。
此外,webpack 确保它只打包一次依赖项,只要导致该依赖项的所有导入都解析为同一个文件。此行为仅在以下情况下发生变化:
- 您的代码中有符号链接(或快捷链接)或 node_modules。
- 你有同一个依赖的多个版本。
- 意外的大写/小写字母更改导致不同的文件(有时,当在 Windows 上编写不区分大小写的代码正在构建在 Linux 上时,会发生这种情况,反之亦然。 )
- 在极少数情况下,如果您使用动态导入,Webpack 有时无法确定确切的依赖关系。
您可以使用 Webpack 分析器找出包中的此类异常情况。此外,您还可以使用 Webpack resolve 功能来指导 Webpack 永远不会将类似的依赖项打包两次(仅延迟补丁号左右)。
我意识到导入第三方模块(即 .vue 组件)内部使用的模块(例如 moment.js)会生成一个模块冗余的构建,因为导入了两次。
这是预期的行为还是我遗漏了什么?
在 package.json 中,如果重要的话,版本完全相同。
行为正确。通常,Webpack 将遍历应用程序的依赖关系树(包括传递依赖关系,即依赖关系的依赖关系)。
此外,webpack 确保它只打包一次依赖项,只要导致该依赖项的所有导入都解析为同一个文件。此行为仅在以下情况下发生变化:
- 您的代码中有符号链接(或快捷链接)或 node_modules。
- 你有同一个依赖的多个版本。
- 意外的大写/小写字母更改导致不同的文件(有时,当在 Windows 上编写不区分大小写的代码正在构建在 Linux 上时,会发生这种情况,反之亦然。 )
- 在极少数情况下,如果您使用动态导入,Webpack 有时无法确定确切的依赖关系。
您可以使用 Webpack 分析器找出包中的此类异常情况。此外,您还可以使用 Webpack resolve 功能来指导 Webpack 永远不会将类似的依赖项打包两次(仅延迟补丁号左右)。