如何修复 Webpack 在生产环境中破坏我的代码?
How do I fix Webpack from mangling my code in production?
我正在使用 BitcoinJS 构建一个应用程序,并且发现使用 -p
标志会导致 webpack 破坏某些部分,从而破坏生成交易的能力。
有人建议我在配置中使用 noParse
和 alias
,这使问题变得更糟(整个应用程序根本无法加载)。
到目前为止,除了关闭生产之外我还没有找到任何解决方法(这会在 javascript 文件中留下各种奇怪的东西,包括我的本地开发路径)。
此处提供示例项目(带有安装说明,以及如何重现):https://github.com/Someguy123/example-webpack-issue
EDIT/UPDATE:@bebraw 提供了一个可行的解决方案,如果其他人想看,可以在示例项目的 fixed
分支上找到它在行动。
问题是在您的情况下,默认情况下 Uglify 破坏太多。根据 bitcoinjs-lib 说明,您需要像这样排除某些名称:
plugins: [
new webpack.optimize.UglifyJsPlugin({
mangle: {
except: [
'Array', 'BigInteger', 'Boolean', 'Buffer',
'ECPair', 'Function', 'Number', 'Point'
]
}
})
]
配置插件后使用webpack
代替webpack -p
。
它会使生成的包稍大一些,但它会起作用。
另一种选择是在其他地方为 bitcoinjs-lib 单独生成包,然后使用它。您还必须考虑其中的修改,但这会使您的项目更整洁。
我正在使用 BitcoinJS 构建一个应用程序,并且发现使用 -p
标志会导致 webpack 破坏某些部分,从而破坏生成交易的能力。
有人建议我在配置中使用 noParse
和 alias
,这使问题变得更糟(整个应用程序根本无法加载)。
到目前为止,除了关闭生产之外我还没有找到任何解决方法(这会在 javascript 文件中留下各种奇怪的东西,包括我的本地开发路径)。
此处提供示例项目(带有安装说明,以及如何重现):https://github.com/Someguy123/example-webpack-issue
EDIT/UPDATE:@bebraw 提供了一个可行的解决方案,如果其他人想看,可以在示例项目的 fixed
分支上找到它在行动。
问题是在您的情况下,默认情况下 Uglify 破坏太多。根据 bitcoinjs-lib 说明,您需要像这样排除某些名称:
plugins: [
new webpack.optimize.UglifyJsPlugin({
mangle: {
except: [
'Array', 'BigInteger', 'Boolean', 'Buffer',
'ECPair', 'Function', 'Number', 'Point'
]
}
})
]
配置插件后使用webpack
代替webpack -p
。
它会使生成的包稍大一些,但它会起作用。
另一种选择是在其他地方为 bitcoinjs-lib 单独生成包,然后使用它。您还必须考虑其中的修改,但这会使您的项目更整洁。