我已升级到webpack 2,在树摇动之前我的捆绑大小已经增加.在研究为什么看起来我有像bn.js和eliptic这样的大文件时(node-libs-browser的某些依赖项 – 它本身现在是webpack2的依赖项).有没有办法删除它们或排除它们?在webpack1中,他们没有被添加到我的包中.
解决方法
问题是因为webpack默认应用其内部插件NodeSourcePlugin
here或
here for webworker,如果你有一个模块甚至引用像crypto这样的NodeJS模块,即:var Crypto = canUseDom? null:require(“crypto”),webpack将捆绑一堆大文件来模拟NodeJS.请参阅此处提交的问题
https://github.com/webpack/webpack/issues/4976.
解决方案是避免引用NodeJS内部模块的任何代码,即使它们未在浏览器上使用.
要捕获这些,可以通过覆盖目标选项来删除NodeSourcePlugin.
const webpack = require("webpack"); const FunctionModulePlugin = require("webpack/lib/FunctionModulePlugin"); const output = { path: process.cwd() + "/build",filename: "bundle.[hash].js" }; { target: () => undefined,output,plugins: [ new webpack.JsonpTemplatePlugin(output),new FunctionModulePlugin(output),new webpack.LoaderTargetPlugin("web"),] }
编辑:使用webpack 3,它现在很简单:
const webpackConfig = { node: false }
如果您必须具有仅用于服务器端的代码并引用NodeJS模块,则最好将这些代码分离到它们自己的模块中,并通过package.json中的浏览器字段导出虚拟副本.
编辑:我在https://medium.com/walmartlabs/webpack-optimization-a-case-study-92b130334b6c写了一篇与此问题相关的博客.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。