This documentation is available as Markdown for AI agents and LLMs. See the full Markdown index or append .md to any documentation URL.

压缩 JavaScript

编辑页面

了解如何在 Expo CLI 中使用 Metro bundler 自定义 JavaScript 压缩流程。


压缩是一个优化构建步骤。它会从源代码中移除不必要的字符,例如压缩空白字符、删除注释以及缩短静态操作。这个过程可以减小最终体积并提升加载速度。

Expo CLI 中的压缩

在 Expo CLI 中,压缩会在生产导出期间对 JavaScript 文件执行(当运行 npx expo exportnpx expo export:embedeas build 等命令时)。

例如,考虑项目中的以下代码片段:

输入
// 这条注释会被移除 console.log('a' + ' ' + 'long' + ' string' + ' to ' + 'collapse');

这段代码会被 Expo CLI 压缩为:

输出
console.log('a long string to collapse');

Expo CLI 的默认压缩对大多数项目来说已经足够。不过,你可以自定义压缩器,以优化速度或移除额外功能,例如日志。

移除 console 日志

你可以从生产构建中移除 console 日志。使用 Terser 压缩器配置中的 drop_console 选项。

metro.config.js
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.transformer.minifierConfig = { compress: { // 下面的选项会移除生产环境中的所有 console 日志语句。 drop_console: true, }, }; module.exports = config;

如果你希望保留某些日志,也可以传入一个要移除的 console 类型数组。例如:drop_console: ['log', 'info'] 将移除 console.logconsole.info,但保留 console.warnconsole.error

自定义压缩器

不同的压缩器在速度和压缩率之间各有取舍。你可以通过修改项目中的 metro.config.js 文件来定制 Expo CLI 使用的压缩器。

Terser

1

要在项目中安装 Terser,请运行以下命令:

Terminal
npm install --save-dev metro-minify-terser

2

使用 transformer.minifierPath 将 Terser 设置为压缩器,并将 terser 选项 传入 transformer.minifierConfig

metro.config.js
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.transformer.minifierPath = 'metro-minify-terser'; config.transformer.minifierConfig = { // Terser 选项... }; module.exports = config;

不安全的 Terser 选项

为了获得额外的压缩效果,但这些优化可能无法在所有 JavaScript 引擎中正常工作,请启用 unsafe compress 选项

metro.config.js
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.transformer.minifierPath = 'metro-minify-terser'; config.transformer.minifierConfig = { compress: { // 启用所有不安全优化。 unsafe: true, unsafe_arrows: true, unsafe_comps: true, unsafe_Function: true, unsafe_math: true, unsafe_symbols: true, unsafe_methods: true, unsafe_proto: true, unsafe_regexp: true, unsafe_undefined: true, unused: true, }, }; module.exports = config;

esbuild

esbuild 用于压缩,其速度远快于 uglify-esterser。更多信息请参见 metro-minify-esbuild 的使用说明。

Uglify

你可以按照以下步骤使用 uglify-es

1

要在项目中安装 Uglify,请运行以下命令:

Terminal
npm install --save-dev metro-minify-uglify

2

使用 transformer.minifierPath 将 Uglify 设置为压缩器,并将 选项 传入 transformer.minifierConfig

metro.config.js
const { getDefaultConfig } = require('expo/metro-config'); const config = getDefaultConfig(__dirname); config.transformer.minifierPath = 'metro-minify-uglify'; config.transformer.minifierConfig = { // 选项:https://github.com/mishoo/UglifyJS#compress-options }; module.exports = config;