Heroku构建错误与Node.js



大家好,提前感谢大家。

谁能给我解释一下如何处理这个错误?

我试图通过Heroku构建我的web应用程序后端,我一直得到相同的错误。为了解决我的问题,我已经用尽了所有的办法。

我使用Node.js与Knex查询。安装npm版本6.14.11 &节点版本v12.12.0

以下是我的一些尝试:

  1. 我已经删除了node modules/package-lock。json,npm install again
  2. 已安装sqlite3@4.2.0和node-pre-gyp
  3. 将dotenv移为开发依赖项。

我提供了以下代码:

  1. Heroku误差
  2. Package.json
  3. Knex文件
  4. 服务器

如果需要更多的信息,请告诉我。这是我在Heroku中得到的错误:

Prebuild detected (node_modules already exists)
Rebuilding any native modules

> sqlite3@4.2.0 install /tmp/build_2aff7876_/node_modules/sqlite3
> node-pre-gyp install --fallback-to-build

internal/modules/cjs/loader.js:818
throw err;
^

Error: Cannot find module './internal/streams/buffer_list'
Require stack:
- /tmp/build_2aff7876_/node_modules/readable-stream/lib/_stream_readable.js
- /tmp/build_2aff7876_/node_modules/readable-stream/readable.js
- /tmp/build_2aff7876_/node_modules/are-we-there-yet/tracker-stream.js
- /tmp/build_2aff7876_/node_modules/are-we-there-yet/tracker-group.js
- /tmp/build_2aff7876_/node_modules/are-we-there-yet/index.js
- /tmp/build_2aff7876_/node_modules/npmlog/log.js
- /tmp/build_2aff7876_/node_modules/node-pre-gyp/lib/node-pre-gyp.js
- /tmp/build_2aff7876_/node_modules/node-pre-gyp/bin/node-pre-gyp
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:815:15)
at Function.Module._load (internal/modules/cjs/loader.js:667:27)
at Module.require (internal/modules/cjs/loader.js:887:19)
at require (internal/modules/cjs/helpers.js:74:18)
at Object.<anonymous> (/tmp/build_2aff7876_/node_modules/readable-stream/lib/_stream_readable.js:72:18)
at Module._compile (internal/modules/cjs/loader.js:999:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
at Module.load (internal/modules/cjs/loader.js:863:32)
at Function.Module._load (internal/modules/cjs/loader.js:708:14)
at Module.require (internal/modules/cjs/loader.js:887:19) {
code: 'MODULE_NOT_FOUND',
requireStack: [
'/tmp/build_2aff7876_/node_modules/readable-stream/lib/_stream_readable.js',
'/tmp/build_2aff7876_/node_modules/readable-stream/readable.js',
'/tmp/build_2aff7876_/node_modules/are-we-there-yet/tracker-stream.js',
'/tmp/build_2aff7876_/node_modules/are-we-there-yet/tracker-group.js',
'/tmp/build_2aff7876_/node_modules/are-we-there-yet/index.js',
'/tmp/build_2aff7876_/node_modules/npmlog/log.js',
'/tmp/build_2aff7876_/node_modules/node-pre-gyp/lib/node-pre-gyp.js',
'/tmp/build_2aff7876_/node_modules/node-pre-gyp/bin/node-pre-gyp'
]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! sqlite3@4.2.0 install: `node-pre-gyp install --fallback-to-build`
npm ERR! Exit status 1
npm ERR! 
npm ERR! Failed at the sqlite3@4.2.0 install 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.E6bjK/_logs/2021-01-28T15_45_17_221Z-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 

这是我的package.json:

{
"name": "Reficio_BE",
"version": "1.0.0",
"description": "Backend For Reficio Database",
"main": "index.js",
"scripts": {
"server": "nodemon index.js",
"start": "node index.js",
"test": "cross-env DB_ENV=test jest --watch"
},
"dependencies": {
"bcryptjs": "^2.4.3",
"cors": "^2.8.5",
"express": "^4.17.1",
"gitignore": "^0.6.0",
"helmet": "^4.1.0",
"jsonwebtoken": "^8.5.1",
"knex": "^0.21.5",
"knex-cleaner": "^1.3.1",
"moment": "^2.27.0",
"node-pre-gyp": "^0.17.0",
"pg": "^8.3.3",
"sqlite3": "^4.2.0"
},
"devDependencies": {
"cross-env": "^7.0.3",
"dotenv": "^8.2.0",
"nodemon": "^2.0.7"
},
"repository": {
"type": "git",
"url": "git+https://github.com/hillan1152/Reficio_BE.git"
},
"keywords": [],
"author": "",
"license": "ISC",
"bugs": {
"url": "https://github.com/hillan1152/Reficio_BE/issues"
},
"homepage": "https://github.com/hillan1152/Reficio_BE#readme"
}
这是我的Knex文件:
// Update with your config settings.
module.exports = {
development: {
client: 'sqlite3',
useNullAsDefault: true,
connection: {
filename: './data/database.db3'
},
migrations: {
directory: './data/migrations'
},
seeds: {
directory:'./data/seeds'
},
pool: {
afterCreate: (conn, done) => {
// runs after a connection is made to the sqlite engine
conn.run('PRAGMA foreign_keys = ON', done); // turn on FK enforcement
}
}
},
testing: {
client: 'sqlite3',
connection: {
filename: './data/test.db3',
},
useNullAsDefault: true,
pool: {
afterCreate: (conn, done) => {
conn.run("PRAGMA foreign_keys = ON", done);
},
},
migrations: {
directory: './data/migrations',
},
seeds: {
directory: './data/seeds',
},
},
production: {
client: 'pg',
connection: process.env.DATABASE_URL,
migrations: {
directory: './data/migrations'
},
seeds: {
directory:'./data/seeds'
},
},
};
这是我的server.js:
// IMPORT DEPENDENCIES
const express = require('express');
const cors = require('cors');
const helmet = require('helmet');
// IMPORT ROUTERS
const bookRouter = require('./routers/Book/book_router');
const chapterRouter = require('./routers/chapter/chapter_router');
const jobRouter = require('./routers/Jobs/job_router');
const codeRouter = require('./routers/Code/code_router');
const sectionRouter = require('./routers/Code/section_router');
const jobCodes = require('./routers/Jobs_codes/job_codes_router');
// SETTING UP SERVER
const server = express();
server.use(helmet());
server.use(cors());
server.use(express.json());
// a
// RUN SERVERS
server.use('/api/jobs', jobRouter);
server.use('/api/books', bookRouter);
server.use('/api/chapters', chapterRouter);
server.use('/api/codes', codeRouter);
server.use('/api/sections', sectionRouter);
server.use('/api/jobCodes', jobCodes);
// SET UP BASIC ENDPOINTS
server.get('/', (req, res) => {
res.status(200).json('Server is running!')
});
module.exports = server;

我不确定您使用node-pre-gyp的目的,但它似乎没有正确配置。您需要在您的package.json中的"scripts"对象中添加一个install键,以及一个"binary"键。

From the docs:

"dependencies"  : {
"node-pre-gyp": "0.6.x"
},
"devDependencies": {
"aws-sdk": "2.x"
}
"scripts": {
"install": "node-pre-gyp install --fallback-to-build"
},
"binary": {
"module_name": "your_module",
"module_path": "./lib/binding/",
"host": "https://your_module.s3-us-west-1.amazonaws.com"
}

https://www.npmjs.com/package/node-pre-gyp

也许这会帮助你朝着正确的方向前进?

最新更新