3

我正在测试 react native 应用程序的发布版本,发现缩小过程正在破坏xml 解析器库。在这种情况下,有一个[ReferenceError: Can't find variable: dc]与上述引用库相关的 .

有没有办法只为这个库禁用缩小?

此外,这是否是解决此类缩小问题的最佳方法?

4

1 回答 1

0

禁用 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 插件,这可能会解决您的问题。

于 2018-02-18T19:58:54.930 回答