考虑有一个场景,我们使用react-native
模式构建我们的release
应用程序,同时具有如下代码:
let img;
if ( __DEV__ ) {
img = require('./debug-image.png');
} else {
img = require('./real-image.png');
}
我的问题是,debug-image.png
和real-image.png
都会捆绑到APK
中(即使debug-image.png
从未在其他任何地方使用过),或者捆绑器是否检测到debug-image.png
文件未被使用(并且不包含在捆绑中)?
我只是通过构建一个无符号释放的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
):
考虑到上述情况,捆绑器足够智能,并且在某些情况下甚至可以从捆绑中排除文件,在其他方面我们可以安全地使用__DEV__
框架为我们提供的常量react-native
。
注意:我正在使用
react-native
和类型脚本模板,如“react-native init MyApp --template typescript
”,但我希望这对于非打字稿模板中使用的bundler也是如此!