我正在测试一个react本机app的发布版本,发现缩小过程正在打破xml parser library。在这种情况下,有一个[ReferenceError: Can't find variable: dc]
,我通过缩小的捆绑和记录来发现,与上面引用的库有关。
有没有办法只为这个库禁用缩小?
另外,这是解决这类缩小问题的最佳方法吗?
答案 0 :(得分:0)
停用React App的缩小
目前的行为是什么?
在为React Native捆绑生产版本时,默认情况下会破坏名称。这可能会破坏代码(如果它依赖于Function.name
)并且问题很难被追踪(特别是如果访问Function.name
的代码深入到依赖关系树中)。
预期的行为是什么?
至少应该有一个选项来禁用重整,但我认为理想情况下应该选择加入而不是选择退出。 (因为它可能以不可预测的方式破坏代码)
现在依靠手动修补minify.js
通过禁用修改来解决:
阻止UglifyJS
更改函数参数名称。
根据文档,您可以使用mangle
选项来执行此操作:
mangle
(默认true
) - 传递false
以跳过修改名称,或传递一个对象来指定修改选项。
对象选项:
except
- 传递Array
应从美国境内排除的标识符toplevel
- 在顶层范围内声明的mangle名称(默认情况下禁用)。eval
- 在使用eval或with的范围内可见的mangle名称(默认情况下禁用)。keep_fnames
- 默认false
。将true
传递给不会破坏函数名称。适用于依赖Function.prototype.name
。node_modules/metro-bundler/src/JSTransformer/worker/minify.js
中的
function minify(filename, code, sourceMap) {
const minifyResult = uglify.minify(code, {
fromString: true,
inSourceMap: sourceMap,
outSourceMap: true,
mangle: false, // ADD THIS LINE
output: {
ascii_only: true,
screw_ie8: true,
},
});
})
或
可能是您的问题是由于运行 webpack -p
和使用 Uglify插件的组合。
尝试在运行build时省略-p
并使用uglify插件,这可能会解决您的问题。