React:禁用给定库的缩小

时间:2018-02-18 12:43:54

标签: reactjs react-native minify react-native-xml2js

我正在测试一个react本机app的发布版本,发现缩小过程正在打破xml parser library。在这种情况下,有一个[ReferenceError: Can't find variable: dc],我通过缩小的捆绑和记录来发现,与上面引用的库有关。

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

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

1 个答案:

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