NextJS通过Webhook触发构建失败问题求助
NextJS API路由触发Webhook构建失败问题
核心现象
通过NextJS API路由接收Contentful Webhook触发构建时失败,但手动执行npm run build可正常完成构建,且相同的Webhook在另一完全相同代码的项目中能正常触发构建。
环境参数
- API文件路径:
/pages/api/my-path-name.js - Node版本:v18.15.0
- NextJS版本:13.4.7
API路由代码
const { exec } = require('child_process') // 这段代码在我的Express应用中能正常执行构建,无任何错误(app.post('/hook', (req, res) => ...)) export default function hook(req, res) { if (req.method !== 'POST') { res.status(405).send({ message: '仅允许POST请求' }) return } console.log("收到POST请求") // 执行npm run build命令 const buildProcess = exec('npm run build'); // 记录构建过程的输出内容 buildProcess.stdout.on('data', (data) => { console.log(data); }); // 记录构建过程中产生的错误信息 buildProcess.stderr.on('data', (data) => { console.error(data); }); // 构建完成后的回调处理 buildProcess.on('close', (code) => { if (code === 0) { console.log('构建过程执行成功。'); res.status = 200 res.send('success') return } else { console.error(`构建过程退出,错误码:${code}。`); res.status = 405 res.end() return } }); res.status = 405 res.end() return }
排查情况
- Webhook本身运行正常,Contentful返回状态码200的成功日志
exec('npm run build')确实被调用,但以错误码1退出,错误信息见附件图片- 曾怀疑执行路径错误,尝试
exec('npm run --prefix ../../ build'),问题未解决,反而验证当前执行路径正确
补充异常
开发模式下收到非标准NODE_ENV警告,但未在任何地方设置NODE_ENV,项目目录中也无相关配置:
- warn 您正在使用环境中非标准的"NODE_ENV"值。这会导致项目出现不一致性,强烈建议不要这样做。
项目配置文件
package.json
{ "name": "smina-shop", "version": "0.1.0", "private": true, "scripts": { "dev": "next dev", "build": "next build", "start": "next start", "lint": "next lint" }, "dependencies": { "@contentful/rich-text-react-renderer": "^15.17.0", "autoprefixer": "10.4.14", "axios": "^1.5.0", "contentful": "^10.4.0", "dotenv": "^16.3.1", "formidable": "^3.5.1", "friendly-challenge": "^0.9.13", "next": "12.2.2", "nodemailer": "^6.9.4", "postcss": "8.4.27", "react": "18.2.0", "react-dom": "18.2.0", "swiper": "^8.4.7", "tailwindcss": "3.3.3" } }
next.config.js
/** * @type {import('next').NextConfig} */ const nextConfig = { // output: 'export', // 可选:为所有路径添加尾部斜杠 `/about` -> `/about/` // trailingSlash: true, // 可选:修改输出目录 `out` -> `dist` // distDir: '', assetPrefix: './' } module.exports = nextConfig
内容的提问来源于stack exchange,提问作者Koenig Alfonz
相关产品推荐
相关产品推荐

