优化cloudflare体积

This commit is contained in:
mtvpls
2026-05-31 15:17:30 +08:00
rodzic 706b2fe272
commit c195bfeafc
+44 -1
Wyświetl plik
@@ -2,6 +2,7 @@
/* eslint-disable @typescript-eslint/no-var-requires */
const { PHASE_DEVELOPMENT_SERVER } = require('next/constants');
const webpack = require('webpack');
// 检测是否为 Cloudflare Pages 构建
const isCloudflare = process.env.CF_PAGES === '1' || process.env.BUILD_TARGET === 'cloudflare';
@@ -33,8 +34,28 @@ const serverExternalPackages = [
'xpath',
];
// 仅在 Cloudflare 或非开发环境下排除 6b85c446 和 706b2fe 引入的 external 包;
// 其它未来加入的 server external 包不受影响。
const buildExcludedServerExternalPackages = [
'@upstash/redis',
'uncrypto',
'@vercel/postgres',
'better-sqlite3',
'cheerio',
'nodemailer',
'pg',
'redis',
'socket.io',
'xml2js',
'xpath',
];
const createNextConfig = (phase) => {
const isDevelopment = phase === PHASE_DEVELOPMENT_SERVER || process.env.NODE_ENV === 'development';
const effectiveServerExternalPackages =
isCloudflare || !isDevelopment
? serverExternalPackages.filter((pkg) => !buildExcludedServerExternalPackages.includes(pkg))
: serverExternalPackages;
const nextConfig = {
// Cloudflare Pages 不支持 standalone,使用默认输出
@@ -51,7 +72,9 @@ const createNextConfig = (phase) => {
experimental: {
instrumentationHook: process.env.NODE_ENV === 'production' && !isCloudflare,
optimizePackageImports: optimizedPackageImports,
serverComponentsExternalPackages: serverExternalPackages,
...(effectiveServerExternalPackages.length
? { serverComponentsExternalPackages: effectiveServerExternalPackages }
: {}),
webpackBuildWorker: !isCloudflare,
},
@@ -106,6 +129,26 @@ const createNextConfig = (phase) => {
crypto: false,
};
// Cloudflare 使用 D1,不需要把 better-sqlite3 原生模块带入 Worker 产物。
if (isCloudflare) {
config.plugins.push(
new webpack.IgnorePlugin({
resourceRegExp: /^better-sqlite3$/,
})
);
config.resolve.alias = {
...config.resolve.alias,
'better-sqlite3': false,
};
config.externals = (config.externals || []).filter((external) => {
return !(
external &&
typeof external === 'object' &&
Object.prototype.hasOwnProperty.call(external, 'better-sqlite3')
);
});
}
// Exclude better-sqlite3, D1, and Postgres modules from client-side bundle
if (!isServer) {
config.externals = config.externals || [];