2017-07-28 4 views
2

Ich versuche, eine grundlegende Express-Anwendung mit Pug mit Webpack einrichten. Das ist mein Dateibaum:mit Pug mit NodeJS und Webpack

build 
    |-views 
    |-index.pug 
    |-app.js 
    |-app.js.map 
server 
    |-app.js 
package.json 
webpack.config.js 

app.js:

const express = require('express'); 
const app = express(); 
const path = require('path'); 

app.set('port', process.env.PORT || 3000); 

app.set('view engine','pug'); 
app.set('views', path.join(__dirname + 'views')); 

app.get('/',(req,res) => { 
    res.render('index'); 
}); 

var server = app.listen(app.get('port'),() => { 
    console.log('Express server is listening on port ' + server.address().port); 
}); 

webpack.config.js:

const webpack = require('webpack'); 
const path = require('path'); 
const fs = require('fs'); 

let nodeModules = {}; 
fs.readdirSync('node_modules') 
    .filter((x) => { 
    return ['.bin'].indexOf(x) === -1; 
    }) 
    .forEach((mod) => { 
    nodeModules[mod] = 'commonjs ' + mod; 
    }); 

module.exports = { 
    entry: './server/app.js', 
    target: 'node', 
    output: { 
    path: path.join(__dirname, 'build'), 
    filename: 'app.js' 
    }, 
    externals: nodeModules, 
    plugins: [ 
    new webpack.IgnorePlugin(/\.(css|less)$/), 
    new webpack.BannerPlugin({banner: 'require("source-map-support").install();', raw: true, entryOnly: false }) 
    ], 
    devtool: 'sourcemap' 
} 

Das Problem, das ich habe ist, dass die Express-App kann‘ t finde die Datei index.pug. Wenn ich den Server und gehen Sie zu localhost starten: 3000 erhalte ich eine Fehlermeldung:

Error: Failed to lookup view "index" in views directory "\views" 

Antwort

2

path.join(__dirname + 'views') ist im Server-Verzeichnis, so ersetzen Sie es mit ./views Oder in ur webpack Config fügen Sie diese Option

node: { 
    __dirname: true, 
    __filename: true, 
}, 

Überprüfen Sie die Webpack-Dokumentation für Server-Seite here

+1

Ich endete mit 'node: {__dirname: false, __Dateiname: true}' mit 'app.use ('/', erfordern ('./Routes/main.js')); app.set ('views', __dirname + '/ views'); 'Danke! – SmellydogCoding