英文:
Next.js how to ignore a complete folder in app?
问题
在下一个13版本中,当nextConfig.output为"export"时,在app/api文件夹中创建构建时会出现错误。
在我的项目中,根据环境变量需要不同的构建类型。
是否有办法在"output"为"export"时忽略构建中的"api"文件夹?
当我使用nextConfig.output为"export"运行构建时,我会得到以下错误:
在以下路径上出现导出错误:
/api/revalidate/route: /api/revalidate
src/app/api/revalidate/route.ts 文件
import { NextRequest, NextResponse } from 'next/server';
import { revalidateTag } from 'next/cache';
export async function GET(request: NextRequest) {
const tag = request.nextUrl.searchParams.get('tag');
if(tag){
revalidateTag(tag);
}
return NextResponse.json({ revalidated: true, now: Date.now() });
}
Next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
};
module.exports = nextConfig;
可复现的存储库
这是一个可复现此错误的存储库
https://github.com/zeckaissue/next-export-api-crash
英文:
On next 13, app/api folder creates an error during build when nextConfig.output is "export".
In my project, I need different build type depending on environnement variable.
Any way to ignore "api" folder during build when "output" is "export" ?
When I run build with nextConfig.output as "export" I got following error:
> Export encountered errors on following paths:
/api/revalidate/route: /api/revalidate
src/app/api/revalidate/route.ts file
import { NextRequest, NextResponse } from 'next/server';
import { revalidateTag } from 'next/cache';
export async function GET(request: NextRequest) {
const tag = request.nextUrl.searchParams.get('tag');
if(tag){
revalidateTag(tag);
}
return NextResponse.json({ revalidated: true, now: Date.now() });
}
Next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
};
module.exports = nextConfig;
Reproducible repository
Here is a repository to reproduce this error
https://github.com/zeckaissue/next-export-api-crash
答案1
得分: 3
我找到了一个解决方法,使用ignore-loader。但也许有一种更好的方法可以通过next.js的内置功能来实现我的目标。
这是我的更新后的next.config.js:
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
/**
*
* @param {import('webpack').Configuration} config
* @param {import('next/dist/server/config-shared').WebpackConfigContext} context
* @returns {import('webpack').Configuration}
*/
webpack: (config) => {
if (process.env.NEXT_OUTPUT_MODE !== "export" || !config.module) {
return config;
}
config.module.rules?.push({
test: /src\/app\/api/,
loader: "ignore-loader",
});
return config;
},
};
module.exports = nextConfig;
英文:
I found a workaround with ignore-loader. But maybe there is a better way to achieve my goal with a built-in feature of next.js
Here is my updated next.config.js
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
/**
*
* @param {import('webpack').Configuration} config
* @param {import('next/dist/server/config-shared').WebpackConfigContext} context
* @returns {import('webpack').Configuration}
*/
webpack: (config) => {
if (process.env.NEXT_OUTPUT_MODE !== "export" || !config.module) {
return config;
}
config.module.rules?.push({
test: /src\/app\/api/,
loader: "ignore-loader",
});
return config;
},
};
module.exports = nextConfig;
答案2
得分: 0
你可以在Next.js配置文件(next.config.js)中使用ignore选项。
如果你还没有创建配置文件,你需要创建一个。
打开next.config.js文件并添加以下代码:
module.exports = {
webpack: (config, { isServer }) => {
if (!isServer) {
config.module.rules.push({
test: /YOUR FOLDER NAME\/.*/,
loader: 'ignore-loader',
});
}
}
}
英文:
You can use the ignore option in the Next.js configuration file (next.config.js).
You will have to create one config file if you havent already.
Open the next.config.js file and add the following code:
module.exports = {
webpack: (config, { isServer }) => {
if (!isServer) {
config.module.rules.push({
test: /YOUR FOLDER NAME\/.*/,
loader: 'ignore-loader',
});
}
答案3
得分: -5
这是我的答案。
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
exclude: [/node_modules/, /api/], // 将此行添加以排除 api 文件夹
};
module.exports = nextConfig;
英文:
Here is my answer.
/** @type {import('next').NextConfig} */
const nextConfig = {
output: process.env.NEXT_OUTPUT_MODE,
exclude: [/node_modules/, /api/], // Add this line to exclude the api folder
};
module.exports = nextConfig;
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论