Files
LunaTV/next.config.js
2025-06-19 21:00:47 +08:00

81 lines
1.8 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** @type {import('next').NextConfig} */
/* eslint-disable @typescript-eslint/no-var-requires */
const nextConfig = {
eslint: {
dirs: ['src'],
},
reactStrictMode: true,
swcMinify: true,
/**
* 在编译阶段把 storage.type 写入环境变量,供浏览器端动态切换存储方案。
*/
env: (function () {
const fs = require('fs');
const path = require('path');
let storageType = 'localstorage';
try {
const json = JSON.parse(
fs.readFileSync(path.join(__dirname, 'config.json'), 'utf-8')
);
storageType = json?.storage?.type ?? 'localstorage';
} catch {
// ignore 保持默认值
}
return {
NEXT_PUBLIC_STORAGE_TYPE: storageType,
};
})(),
// Uncoment to add domain whitelist
images: {
remotePatterns: [
{
protocol: 'https',
hostname: '**',
},
{
protocol: 'http',
hostname: '**',
},
],
},
webpack(config) {
// Grab the existing rule that handles SVG imports
const fileLoaderRule = config.module.rules.find((rule) =>
rule.test?.test?.('.svg')
);
config.module.rules.push(
// Reapply the existing rule, but only for svg imports ending in ?url
{
...fileLoaderRule,
test: /\.svg$/i,
resourceQuery: /url/, // *.svg?url
},
// Convert all other *.svg imports to React components
{
test: /\.svg$/i,
issuer: { not: /\.(css|scss|sass)$/ },
resourceQuery: { not: /url/ }, // exclude if *.svg?url
loader: '@svgr/webpack',
options: {
dimensions: false,
titleProp: true,
},
}
);
// Modify the file loader rule to ignore *.svg, since we have it handled now.
fileLoaderRule.exclude = /\.svg$/i;
return config;
},
};
module.exports = nextConfig;