Webpack 4是否会对已经被Webpack打包过的npm包进行去重?

3

我看到有类似的问题。但我所看到的问题是在WebPack 4发布之前提出的,未特别涉及npm,且没有明确答案。

假设我使用webpack打包一个包含依赖项的软件包,并且不想将这些依赖项归类为webpack externals和npm peer dependencies。然后我将此软件包发布到npm上。

某人下载我的软件包并将其用作项目的一部分。该项目已经包含了我的软件包的某个依赖项。假设该项目反过来又被webpack打包。

1.) 当项目被打包时,webpack是否会识别和去重重复依赖项?

2.) 如果不行,并且我不使用webpack来打包我的npm软件包,那么当项目被打包时,它会允许webpack去重重复依赖项吗?

3.) 在这方面的最佳实践是什么?

1个回答

2

如果您已经使用webpack捆绑了所有依赖项的文件进行分发,那么您不需要声明依赖项或peerDependencies。

1.) 当项目被捆绑时,webpack会识别和去重重复的依赖项吗?

是的

3.) 在这方面有什么最佳实践?

使用externals和peer dependencies发布bundle,然后让用户在其端口捆绑。


那么,对于3.)最佳实践,如果我使用webpack打包,所有依赖项都应该是外部/同级依赖项吗?如果我有5个不常见的依赖项怎么办?每次有人使用我的软件包时,他们都必须下载全部5个依赖项,只是为了避免重复?这似乎很奇怪。 - twils0
当人们安装您的软件包时,将下载您不常见的依赖项。然后Webpack将在另一端更好地完成工作。发布已经捆绑的依赖项并不是坏事。实际上这取决于您。 - PlayMa256
感谢您的帮助!那么您的意思是,如果我打包,它会去重。如果我不打包,并且使用外部/同级依赖项,则当用户下载我的npm包时,它将自动安装其他依赖项?或者,用户需要手动下载对等依赖关系? - twils0
1
无论你是否打包,webpack 都会进行去重。最常用的策略是不打包,让应用程序的使用者来打包。这并不意味着你不能打包,这取决于你自己。如果你想确保它能够在任何地方正常工作,那么你可以打包。 - PlayMa256
当你将依赖项添加为dependencies时,当有人写npm install yourpackage时,它会在你的package.json中的dependencies对象上安装所有依赖项。当你将其放置在peerDependencies上时,用户必须安装这些依赖项,它们不会自动安装。 - PlayMa256
明白了,我明白你的意思。谢谢! - twils0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接