Tailwind+Turborepo+Next.js下EMFILE文件打开过多错误求助
解决Turborepo + Next.js + Tailwind的EMFILE文件过多错误
1. 精准限定Tailwind扫描的文件范围
别用packages/**/*这种宽泛的正则,只指定实际用到的UI库文件路径。比如你的UI库在packages/ui下,就把content配置改成:
// tailwind.config.js module.exports = { content: [ './app/**/*.{js,ts,jsx,tsx,mdx}', './pages/**/*.{js,ts,jsx,tsx,mdx}', './components/**/*.{js,ts,jsx,tsx,mdx}', // 只扫描UI库的源码文件,排除打包产物和无关目录 '../packages/ui/src/**/*.{js,ts,jsx,tsx}' ], // ...其他配置 }
这样能大幅减少Tailwind需要打开的文件数量,从根源避免文件描述符耗尽。
2. 排除不必要的目录
如果必须保留较宽泛的正则,给content加上exclude规则,跳过node_modules、打包产物、缓存目录这些不需要处理的文件:
// tailwind.config.js module.exports = { content: { files: [ './**/*.{js,ts,jsx,tsx}', '../packages/**/*.{js,ts,jsx,tsx}' ], exclude: [ 'node_modules/', 'dist/', 'build/', '.next/', '**/*.d.ts' ] }, // ...其他配置 }
3. 调整系统文件描述符限制
EMFILE本质是系统允许单个进程打开的文件数不够,临时调整可以在终端执行:
- macOS/Linux:
ulimit -n 10240
如果要永久生效: - macOS:编辑
~/.zshrc或~/.bashrc,添加ulimit -n 10240,重启终端生效 - Linux:编辑
/etc/security/limits.conf,添加
然后重启系统或重新登录。* soft nofile 10240 * hard nofile 10240
4. 优化Turborepo的构建配置
在turborepo.json里设置filter规则,只构建当前Next.js项目依赖的包,减少整体文件数量:
// turborepo.json { "pipeline": { "build": { "dependsOn": ["^build"], "outputs": ["dist/**", ".next/**"], "filter": "..." // 只包含你的Next.js项目和UI库 } } }
内容的提问来源于stack exchange,提问作者Usman Sabuwala
相关产品推荐
相关产品推荐

