如何删除 Nextjs 应用程序中的 .js 块?
How to remove .js chunks in Nextjs application?
我有这个 nextjs 应用程序,灯塔一直告诉我删除未使用的块。
…chunks/26c47f1….6971807….js
410.0 KiB
399.8 KiB
…chunks/25.91c4046….js
437.6 KiB
392.5 KiB
…chunks/30.3fdf525….js
我不知道它们是如何生成的,也不知道如何删除它们。找遍了都没有找到解决方法。
如何在构建后删除未使用的块?
如果您的构建生成到 dist 文件夹中 - 使用此命令更改您的 package.json 构建脚本
build: "rm -rf dist && next build"
你应该小心删除这些块,因为它会破坏你的构建。这些文件是为提高性能而进行代码拆分的结果。它们在每次构建时自动生成。因此,您需要在每次构建时手动删除它们,但同样,不 推荐这样做。
Lighthouse 仅测试您当前所在的页面,因此您可能不会在该页面上使用这些块,而是在另一个页面上使用。
适当的问题是 - 如何在构建之前删除未使用的代码?
浏览器扩展
浏览器扩展可能会注入由 lighthouse 读取的代码,这些代码将被您的应用程序视为未使用。
您应该 运行 灯塔处于 incognito 模式以防止这种情况并获得最准确的分数 - 但这不会解决您所有未使用的代码问题。
Tree shaking 和第 3 方库
你可以和官方一起摇树Next.js bundle analyzer。这可以帮助识别重复的库并减少包大小和卡盘大小。
Tree shaking 将有助于识别如下问题。
显示如何通过第 3 方库包含未使用代码的示例
以下将包括整个 lodash 库
import { throttle } from 'lodash'
正确的方法是仅导入您正在使用的内容,即
import throttle from 'lodash/throttle'
注意:一些第三方库导出所有内容,您不能只使用您需要的部分。如果您想完全删除未使用的代码,则必须删除此类库。
你自己的代码
这些块也可以真正未使用,因此您需要 find/look 用于:
- 未使用
import
- 未使用
export
- 未使用的变量
export *
而您没有使用所有代码
- 在您的项目文件夹中但未使用的代码
- 永远无法达到的条件代码 - 这些问题真的很常见 - linter 会发现这些
有些库可以找到未使用的代码。但对于小型项目,您可以只使用 linting 或执行手动搜索。
动态导入
您还可以通过 dynamically importing 有条件使用的代码来减小包大小。
深思
最后,即使有未使用的块文件,您仍然可以获得 100% 的灯塔分数。但是,您有很多未使用的代码,因此您的项目中可能存在重复代码或无用代码,应该将其删除。
在完成了在我之前提供答案的 2 位天才的步骤和建议之后,我相信摆脱 nextjs 应用程序中未使用的块的答案是完成列出的所有步骤,以及:
- 点击灯塔上的区块以导航到特定路线。
- 手动检查打印的代码行,直到找到共同点。在我的例子中,块显示 shoelace 和 aws
- 阅读上述步骤中确定的资源的相应文档,找出 tree shaking 技术来实施和摆脱未使用的块。
更重要的是,我发现未使用的块不会影响您使用 Lighthouse 的页面得分。可以找到影响页面得分的关键因素here
我有这个 nextjs 应用程序,灯塔一直告诉我删除未使用的块。
…chunks/26c47f1….6971807….js 410.0 KiB 399.8 KiB …chunks/25.91c4046….js 437.6 KiB 392.5 KiB …chunks/30.3fdf525….js
我不知道它们是如何生成的,也不知道如何删除它们。找遍了都没有找到解决方法。
如何在构建后删除未使用的块?
如果您的构建生成到 dist 文件夹中 - 使用此命令更改您的 package.json 构建脚本
build: "rm -rf dist && next build"
你应该小心删除这些块,因为它会破坏你的构建。这些文件是为提高性能而进行代码拆分的结果。它们在每次构建时自动生成。因此,您需要在每次构建时手动删除它们,但同样,不 推荐这样做。
Lighthouse 仅测试您当前所在的页面,因此您可能不会在该页面上使用这些块,而是在另一个页面上使用。
适当的问题是 - 如何在构建之前删除未使用的代码?
浏览器扩展
浏览器扩展可能会注入由 lighthouse 读取的代码,这些代码将被您的应用程序视为未使用。
您应该 运行 灯塔处于 incognito 模式以防止这种情况并获得最准确的分数 - 但这不会解决您所有未使用的代码问题。
Tree shaking 和第 3 方库
你可以和官方一起摇树Next.js bundle analyzer。这可以帮助识别重复的库并减少包大小和卡盘大小。 Tree shaking 将有助于识别如下问题。
显示如何通过第 3 方库包含未使用代码的示例
以下将包括整个 lodash 库
import { throttle } from 'lodash'
正确的方法是仅导入您正在使用的内容,即
import throttle from 'lodash/throttle'
注意:一些第三方库导出所有内容,您不能只使用您需要的部分。如果您想完全删除未使用的代码,则必须删除此类库。
你自己的代码
这些块也可以真正未使用,因此您需要 find/look 用于:
- 未使用
import
- 未使用
export
- 未使用的变量
export *
而您没有使用所有代码- 在您的项目文件夹中但未使用的代码
- 永远无法达到的条件代码 - 这些问题真的很常见 - linter 会发现这些
有些库可以找到未使用的代码。但对于小型项目,您可以只使用 linting 或执行手动搜索。
动态导入
您还可以通过 dynamically importing 有条件使用的代码来减小包大小。
深思
最后,即使有未使用的块文件,您仍然可以获得 100% 的灯塔分数。但是,您有很多未使用的代码,因此您的项目中可能存在重复代码或无用代码,应该将其删除。
在完成了在我之前提供答案的 2 位天才的步骤和建议之后,我相信摆脱 nextjs 应用程序中未使用的块的答案是完成列出的所有步骤,以及:
- 点击灯塔上的区块以导航到特定路线。
- 手动检查打印的代码行,直到找到共同点。在我的例子中,块显示 shoelace 和 aws
- 阅读上述步骤中确定的资源的相应文档,找出 tree shaking 技术来实施和摆脱未使用的块。
更重要的是,我发现未使用的块不会影响您使用 Lighthouse 的页面得分。可以找到影响页面得分的关键因素here