react-native bundler可以检测未使用的文件吗?

问题描述 投票:5回答:1

考虑有一个场景,我们使用react-native模式构建我们的release应用程序,同时具有如下代码:

let img;
if ( __DEV__ ) {
  img = require('./debug-image.png');
} else {
  img = require('./real-image.png');
}

我的问题是,debug-image.pngreal-image.png都会捆绑到APK中(即使debug-image.png从未在其他任何地方使用过),或者捆绑器是否检测到debug-image.png文件未被使用(并且不包含在捆绑中)?

react-native babeljs bundler assets preprocessor
1个回答
0
投票

我只是通过构建一个无符号释放的APK(如another post中所述)两次测试它,一次使用下面的代码(First-Case):

let bigFile;
if ( __DEV__ ) {
  bigFile = require('./big-file.dat');
} else {
  bigFile = require('./small-file.dat');
}

在上面,将!添加到if语句,如if ( ! __DEV__ ) { ...,导致APK-size增加50 mb(即./big-file.dat的大小)。


还有一次,用下面的代码测试(第二个案例):

let bigFile = require('./big-file.dat');
if ( ! __DEV__ ) {
  bigFile = null;
}

无论我做了什么,APK大小只是保持巨大。

结论:

根据APK大小的变化,我确信并且可以说(在撰写本文时,即2019):

  • 捆绑器足够智能以处理First-Case并从bundle中排除仅在非活动if语句内使用的文件。
  • 但另一方面,它无法优化文件,这在一个更复杂的二例中使用(它根本不跟踪变量)。

考虑到上述情况,捆绑器足够智能,并且在某些情况下甚至可以从捆绑中排除文件,在其他方面我们可以安全地使用__DEV__框架为我们提供的常量react-native

注意:我正在使用react-native和类型脚本模板,如“react-native init MyApp --template typescript”,但我希望这对于非打字稿模板中使用的bundler也是如此!

© www.soinside.com 2019 - 2024. All rights reserved.