файл связки машинописи узла с веб-пакетом не находит файлы e js - PullRequest
0 голосов
/ 20 января 2020

У меня есть проект узла, использующий машинопись и 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. как я могу решить эту проблему?

...