У меня есть проект узла, использующий машинопись и Webpack для компиляции в один файл. моя структура проекта выглядит следующим образом:
-src
-db
-middleware
-models
-routes
-services
-validations
-views
-error
--index.css
--index.ejs
-provider
--index.css
--index.ejs
--server.ts
--webpack.config.js
--tsconfig.json
--package.json
, а мой webpack.config. js - это:
const path = require('path');
const nodeExternals = require('webpack-node-externals');
const CopyPlugin = require('copy-webpack-plugin')
const {
NODE_ENV = 'production',
} = process.env;
module.exports = {
entry: './src/server.ts',
mode: NODE_ENV,
target: 'node',
watch: NODE_ENV === 'development',
output: {
path: path.resolve(__dirname, 'build'),
filename: 'index.js'
},
resolve: {
extensions: ['.ts', '.js'],
},
module: {
rules: [
{
test: /\.ts$/,
use: [
'ts-loader',
]
},
]
},
externals: [nodeExternals()],
// copy my views folder to build folder
plugins: [
new CopyPlugin([
{
from: path.join(__dirname, "src", "views"),
to: 'views',
}
])
],
}
, и я использовал e js для повторения в этом проект. Файл моего сервера ts:
import express from 'express'
import path from 'path'
import bodyParser from 'body-parser'
import dotenv from 'dotenv'
dotenv.config()
const app = express()
import errorResponseHandler from './middleware/errorResponseHandler'
import routes from './routes'
import './db'
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs');
app.use(express.static(path.join(__dirname, 'views')))
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json())
app.use(routes)
app.use(errorResponseHandler)
app.listen(process.env.PORT || 3000, () => {
console.log(`app listened on port ${process.env.PORT || 3000}`)
})
и мой файл маршрутов выглядит так:
import express, { Request, Response, NextFunction } from 'express'
import cashBackModel from '../models/payment'
import validate, { validations } from '../validations'
const router = express.Router()
router.route('/')
.get((req: Request, res: Response, next: NextFunction) => {
res.render('providers/index', undefined, (e, html) => {
if (e) throw e;
res.send(html)
});
})
router.route('/woop/cash-back')
.get(cashBackModel.get)
.post(validate(validations.providers), cashBackModel.post)
router.route('/*')
.get((req: Request, res: Response) => {
res.render('error/index', { status: 404, message: 'Page Not Found' })
})
export default router
в режиме разработки мое приложение работает отлично, но когда я собираю приложение и запускаю его, оно либо не удалось найти модуль "e js" или он сказал, что:
TypeError [ERR_INVALID_ARG_TYPE]: аргумент "путь" должен иметь тип string. Полученный тип объекта
Я думаю, что он не может найти мой файл e js. как я могу решить эту проблему?