NextJS迁移Turbopack:如何在构建时排除指定依赖?
在Turbopack中替代Webpack externals排除依赖的最优方案
Turbopack目前确实没有提供和Webpack externals完全对等的配置项,你用resolveAlias指向空模块的思路是可行的,但可以优化得更简洁合理。以下是两种更优的处理方式:
方案1:极简空模块替代自定义mock
不用写带空函数的mock文件,直接创建一个empty.js,内容仅为:
export {};
然后在next.config.mjs中配置别名:
import path from 'path'; /** @type {import('next').NextConfig} */ const nextConfig = { experimental: { turbo: { resolveAlias: { 'pino-pretty': path.resolve(__dirname, './empty.js'), lokijs: path.resolve(__dirname, './empty.js'), encoding: path.resolve(__dirname, './empty.js'), }, }, }, }; export default nextConfig;
这种空模块能适配各种导入方式(默认导入、命名导入),避免出现导入后调用报错的问题,比返回空函数的mock更通用。
方案2:用虚拟模块省去物理文件
Turbopack支持虚拟模块,你可以直接把别名指向一个内联的空模块,无需创建额外文件:
/** @type {import('next').NextConfig} */ const nextConfig = { experimental: { turbo: { resolveAlias: { 'pino-pretty': 'data:text/javascript,export {};', lokijs: 'data:text/javascript,export {};', encoding: 'data:text/javascript,export {};', }, }, }, }; export default nextConfig;
这种方式配置更紧凑,完全省去了文件维护的成本,适合快速排除不需要的依赖。
补充说明
如果这些依赖是第三方包间接引入的,且你确认它们在Web环境下完全无用,以上两种方案都能达到和Webpack externals一致的效果:让Turbopack跳过这些模块的打包,同时不会因为找不到模块而抛出构建错误。
内容的提问来源于stack exchange,提问作者Mark Barton
相关产品推荐
相关产品推荐

