如何解决Heroku Build 上的 MERN 堆栈在 heroku-postbuild 失败
这是我收到的错误消息:
-----> Build
Running heroku-postbuild
> syllame@1.0.0 heroku-postbuild /tmp/build_ded3c540_
> npm install --prefix client && npm run build && --prefix client
> core-js@2.6.12 postinstall /tmp/build_ded3c540_/client/node_modules/babel-runtime/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
> core-js@3.8.2 postinstall /tmp/build_ded3c540_/client/node_modules/core-js
> node -e "try{require('./postinstall')}catch(e){}"
> core-js-pure@3.8.1 postinstall /tmp/build_ded3c540_/client/node_modules/core-js-pure
> node -e "try{require('./postinstall')}catch(e){}"
> ejs@2.7.4 postinstall /tmp/build_ded3c540_/client/node_modules/ejs
> node ./postinstall.js
added 1949 packages from 765 contributors and audited 1953 packages in 46.583s
125 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
sh: 1: --prefix: not found
npm ERR! code ELIFECYCLE
npm ERR! syscall spawn
npm ERR! file sh
npm ERR! errno ENOENT
npm ERR! syllame@1.0.0 heroku-postbuild: `npm install --prefix client && npm run build && --prefix client`
npm ERR! spawn ENOENT
npm ERR!
npm ERR! Failed at the syllame@1.0.0 heroku-postbuild script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /tmp/npmcache.JbA0H/_logs/2021-01-03T20_51_10_460Z-debug.log
-----> Build failed
We're sorry this build is failing! You can troubleshoot common issues here:
https://devcenter.heroku.com/articles/troubleshooting-node-deploys
Some possible problems:
- node_modules checked into source control
https://devcenter.heroku.com/articles/node-best-practices#only-git-the-important-bits
- Node version not specified in package.json
https://devcenter.heroku.com/articles/nodejs-support#specifying-a-node-js-version
Love,Heroku
! Push rejected,failed to compile Node.js app.
! Push failed
以上是npm安装成功后的Heroku日志。我尝试删除客户端中隐藏的 .git 文件夹,但没有(是的,我也检查了“显示隐藏文件:Windows 资源管理器中的选项”)。我还尝试通过其他堆栈流教程多次提交和重新提交无济于事。我已经卡了一个星期,最后“放弃”了,这就是我在这里问这个问题的原因。 我还尝试使用以下内容:“heroku-postbuild”:“NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build && --prefix client
那还是不行。该应用程序在 localhost/ 本地环境中功能齐全。 我什至尝试完全删除客户端文件夹。还是一样的错误。 在 package.json 的“engines”中定义 node 和 npm 也没有任何改变。 我想不出别的了。 我尝试使用 Heroku CLI,同样的问题。 我正在使用 Visual Studio 代码。
我的项目结构:
app/
client/
config/
models/
node_modules
routes/
validation
LICENSE
package-lock.json
package.json
README.md
server.js
这是我的 server.js 代码:
const express = require ('express'); //node.js flexible web application framework that provides features for web applications
const mongoose = require ("mongoose"); // Mongoose is a MongoDB object modeling toold designed to work in an asynchronous environment,supporting both promises and callbacks
const bodyParser = require ("body-parser"); //node.js body parsing middleware
const passport = require("passport"); //used to authenticate requests,via plugins known as ~strategies~.
const path = require("path");
const users = require("./routes/api/users");
const app = express();
//body parser middleware
app.use(
bodyParser.urlencoded({
extended: false
})
);
app.use(bodyParser.json());
//configure our database connection
const db = require("./config/keys").mongoURI;
//actually connecting to our database
mongoose
.connect(
db,{ useNewUrlParser: true,useUnifiedTopology: true}
)
.then( () => console.log("Mongo DB connected successfully!"))
.catch(err => console.log(err));
//middleware for passport
app.use(passport.initialize());
//configure the passport
require("./config/passport")(passport);
//our routes
app.use("/api/users",users);
//serve our static assets (build folder if we are in production)
if(process.env.NODE_ENV=== 'production') {
//set static folder
app.use(express.static('client/build'))
app.get('*',(req,res) => {
res.sendFile(path.resolve(__dirname,'client','build','index.html'));
})
}
const port = process.env.PORT || 5000; //process.env.PORT is heroku's port if you choose to deploy the app
app.listen(port,() => console.log(`Server up and running on port ${port} !`));
和我在服务器端的 package.json
{
"name": "syllame","version": "1.0.0","description": "","main": "server.js","scripts": {
"client-install": "npm install --prefix client","start": "node server.js","server": "nodemon server.js","client": "npm start --prefix client","dev": "concurrently \"npm run server\" \"npm run client\"","heroku-postbuild" : "NPM_CONFIG_PRODUCTION=false npm install --prefix client && npm run build && --prefix client"
},"repository": {
"type": "git","url": "git+https://github.com/bbobbylon/syllame.git"
},"author": "Robert C. Oliver,Jr. and Colin J. McClintic","license": "MIT","bugs": {
"url": "https://github.com/bbobbylon/syllame/issues"
},"homepage": "https://github.com/bbobbylon/syllame#readme","devDependencies": {
"nodemon": "^2.0.6"
},"dependencies": {
"bcryptjs": "^2.4.3","body-parser": "^1.19.0","concurrently": "^5.3.0","express": "^4.17.1","is-empty": "^1.2.0","jsonwebtoken": "^8.5.1","mongoose": "^5.11.9","passport": "^0.4.1","passport-jwt": "^4.0.0","validator": "^13.5.2"
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。