我正在测试 react native 应用程序的发布版本,发现缩小过程正在破坏xml 解析器库。在这种情况下,有一个[ReferenceError: Can't find variable: dc]
与上述引用库相关的 .
有没有办法只为这个库禁用缩小?
此外,这是否是解决此类缩小问题的最佳方法?
我正在测试 react native 应用程序的发布版本,发现缩小过程正在破坏xml 解析器库。在这种情况下,有一个[ReferenceError: Can't find variable: dc]
与上述引用库相关的 .
有没有办法只为这个库禁用缩小?
此外,这是否是解决此类缩小问题的最佳方法?
禁用 React App 的缩小
当前的行为是什么?
当为 React Native 打包生产构建时,默认情况下名称会被破坏。这可能会破坏代码(如果它依赖于Function.name
)并且问题很难追踪(特别是如果代码访问Function.name
深入到您的依赖关系树中)。
预期的行为是什么?
至少应该有一个禁用修饰的选项,但我认为理想情况下它应该是选择加入而不是选择退出。(因为它会以不可预知的方式破坏代码)
现在依靠手动修补minify.js
通过禁用重整解决:
防止UglifyJS
更改函数参数名称。
根据文档,您可以使用mangle
选项来做到这一点:
mangle
(默认true
)——传递false
跳过重整名称,或传递一个对象来指定重整选项。
对象选项:
except
- 传递一个Array
应该从修改中排除的标识符toplevel
— 在顶级范围内声明的名称(默认情况下禁用)。eval
— mangle 名称在使用 eval 或 with 的范围内可见(默认禁用)。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 Plugin的组合。
尝试-p
在运行构建时省略并使用 uglify 插件,这可能会解决您的问题。