package.json 中的生产脚本找不到模块
Production script in package.json cant find a module
当我 运行 npm run prod
时,我得到错误:
我的package.json脚本如下:
"scripts": {
"build": "npm run clean && babel src/index.js --out-dir dist --copy-files",
"clean": "rm -rf dist",
"test": "jest --coverage --watch",
"start": "babel-node — exec src/index.js",
"dev": "nodemon — exec babel-node src/index.js",
"prod": "node dist/index.js"
我的目录结构:
dist/
index.js // the compiled file
node_modules
src/
/config
/controllers
/dao
/middlewares
/routes
/services
index.js
server.js
Server.js 是我的 Express 应用程序,它被导出到 Index.js,我在那里连接到 Mongodb。第 9 行,如编译后的错误堆栈中所述 Index.js 是:
var app = require('./server'); // not being found
我不确定为什么找不到依赖项。下面是 index.js:
require('dotenv').config()
const app = require('./server')
const chalk = require('chalk')
const OrdersDAO = require('./dao/ordersDAO')
// module to connect to MongoClient
const { MongoClient } = require('mongodb')
const uri = process.env.MONGODB_CONN_STR
const client = new MongoClient(uri, {
useNewUrlParser: true,
poolSize: 50,
useUnifiedTopology: true,
})
const connectToMongoDB = async () => {
try {
const conn = await client.connect()
const orders = conn
.db(process.env.DATABASE)
.collection(process.env.COLLECTION)
await OrdersDAO.injectDB(client)
await listDatabases(client)
app.listen(process.env.PORT, () => {
console.log(`listening on port ${process.env.PORT}`)
})
} catch (e) {
console.error(`Index.js ~~~ Unable to get database.collection: ${e}`)
// Exit Gracefully ~~~ https://nodejs.dev/learn/how-to-exit-from-a-nodejs-program
process.on('SIGTERM', () => {
server.close(() => {
console.log('Process terminated')
})
})
} finally {
// when uncommented ~~~ OrdersDAO.addOrder() ~~~ Unable to post order:) MongoError: Topology is closed, please connect
// console.log(chalk.magentaBright('Mongo Connection is closing ~~~~'))
// await client.close()
}
}
const listDatabases = async (client) => {
try {
const dbList = await client.db().admin().listDatabases()
console.log(chalk.magentaBright('Databases:'))
dbList.databases.forEach((db) => {
console.log(chalk.greenBright(` - ${db.name}`))
})
} catch (error) {
console.error(error)
}
}
connectToMongoDB()
server.js
onst express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
require('dotenv').config()
const orders = require('./routes/orders')
const app = express()
// http://expressjs.com/en/4x/api.html#express.urlencoded
app.use(cors())
app.use(express.urlencoded({ extended: true }))
/* whosebug.com/questions/24330014/bodyparser-is-deprecated-express-4
parse the incoming requests with JSON payloads */
app.use(express.json())
// Register api routes
app.use('/', orders) //(req, res) => res.send(console.log('Time:', Date.now())))
app.use('/admin/', orders)
app.use('/admin/:id', orders)
/*
TODO - fall through route handler
*/
// app.use("*", (req, res) => res.status(404).json({ error: "not found" }));
module.exports = app
看来你必须构建整个 src 文件夹,而不仅仅是 index.js
这样做,然后您将在 dist 文件夹中看到 index.js 和 server.js 文件。
为此,请将 package.json 中的构建命令更改为:
npm run clean && babel src --out-dir dist --copy-files
解决方案是将构建脚本修改为:
"build": "npm run clean && babel ./src --out-dir dist --copy-files",
之后,根据我在 package.json 中的依赖项,我遇到了再生器运行时错误:
/Users/kevinturney/Vue/cookie_mvp_next/cookie_server/dist/dao/ordersDAO.js:30 var injectDB = _asyncToGenerator( /*#__PURE_*/regeneratorRuntime.mark(function _callee(clientConnection) { ^ –
然后我 npm 安装了 regenrator-runtime 和 core-js,参见 Dev.to 文章。最后,我将它们导入 index.js.
最后一点,当 运行 在 index.js 上进行测试时,我没有定义 regenerator-runtime,所以在 /tests/indes.spec.js, 我导入了:
import 'regenerator-runtime/runtime'
一切正常。
当我 运行 npm run prod
时,我得到错误:
我的package.json脚本如下:
"scripts": {
"build": "npm run clean && babel src/index.js --out-dir dist --copy-files",
"clean": "rm -rf dist",
"test": "jest --coverage --watch",
"start": "babel-node — exec src/index.js",
"dev": "nodemon — exec babel-node src/index.js",
"prod": "node dist/index.js"
我的目录结构:
dist/
index.js // the compiled file
node_modules
src/
/config
/controllers
/dao
/middlewares
/routes
/services
index.js
server.js
Server.js 是我的 Express 应用程序,它被导出到 Index.js,我在那里连接到 Mongodb。第 9 行,如编译后的错误堆栈中所述 Index.js 是:
var app = require('./server'); // not being found
我不确定为什么找不到依赖项。下面是 index.js:
require('dotenv').config()
const app = require('./server')
const chalk = require('chalk')
const OrdersDAO = require('./dao/ordersDAO')
// module to connect to MongoClient
const { MongoClient } = require('mongodb')
const uri = process.env.MONGODB_CONN_STR
const client = new MongoClient(uri, {
useNewUrlParser: true,
poolSize: 50,
useUnifiedTopology: true,
})
const connectToMongoDB = async () => {
try {
const conn = await client.connect()
const orders = conn
.db(process.env.DATABASE)
.collection(process.env.COLLECTION)
await OrdersDAO.injectDB(client)
await listDatabases(client)
app.listen(process.env.PORT, () => {
console.log(`listening on port ${process.env.PORT}`)
})
} catch (e) {
console.error(`Index.js ~~~ Unable to get database.collection: ${e}`)
// Exit Gracefully ~~~ https://nodejs.dev/learn/how-to-exit-from-a-nodejs-program
process.on('SIGTERM', () => {
server.close(() => {
console.log('Process terminated')
})
})
} finally {
// when uncommented ~~~ OrdersDAO.addOrder() ~~~ Unable to post order:) MongoError: Topology is closed, please connect
// console.log(chalk.magentaBright('Mongo Connection is closing ~~~~'))
// await client.close()
}
}
const listDatabases = async (client) => {
try {
const dbList = await client.db().admin().listDatabases()
console.log(chalk.magentaBright('Databases:'))
dbList.databases.forEach((db) => {
console.log(chalk.greenBright(` - ${db.name}`))
})
} catch (error) {
console.error(error)
}
}
connectToMongoDB()
server.js
onst express = require('express')
const bodyParser = require('body-parser')
const cors = require('cors')
require('dotenv').config()
const orders = require('./routes/orders')
const app = express()
// http://expressjs.com/en/4x/api.html#express.urlencoded
app.use(cors())
app.use(express.urlencoded({ extended: true }))
/* whosebug.com/questions/24330014/bodyparser-is-deprecated-express-4
parse the incoming requests with JSON payloads */
app.use(express.json())
// Register api routes
app.use('/', orders) //(req, res) => res.send(console.log('Time:', Date.now())))
app.use('/admin/', orders)
app.use('/admin/:id', orders)
/*
TODO - fall through route handler
*/
// app.use("*", (req, res) => res.status(404).json({ error: "not found" }));
module.exports = app
看来你必须构建整个 src 文件夹,而不仅仅是 index.js 这样做,然后您将在 dist 文件夹中看到 index.js 和 server.js 文件。
为此,请将 package.json 中的构建命令更改为:
npm run clean && babel src --out-dir dist --copy-files
解决方案是将构建脚本修改为:
"build": "npm run clean && babel ./src --out-dir dist --copy-files",
之后,根据我在 package.json 中的依赖项,我遇到了再生器运行时错误:
/Users/kevinturney/Vue/cookie_mvp_next/cookie_server/dist/dao/ordersDAO.js:30 var injectDB = _asyncToGenerator( /*#__PURE_*/regeneratorRuntime.mark(function _callee(clientConnection) { ^ –
然后我 npm 安装了 regenrator-runtime 和 core-js,参见 Dev.to 文章。最后,我将它们导入 index.js.
最后一点,当 运行 在 index.js 上进行测试时,我没有定义 regenerator-runtime,所以在 /tests/indes.spec.js, 我导入了:
import 'regenerator-runtime/runtime'
一切正常。