Webpack捆绑的快递应用程序无法查找视图

我运行npm run start和服务器运行良好。 当我尝试在localhost上查看客户端时,服务器返回错误:GET / 500 62.700 ms – 2028错误:无法在视图目录“/ views”中查找视图“错误”

只使用源文件时,应用程序运行良好。 从webpack包运行应用程序时发生此错误。

源代码和捆绑文件之间有什么区别会导致这个错误发生?

  • 故宫:3.8.2
  • 节点:4.2.6
  • expression:4.13.1
  • webpack:1.12.13
  • babel-loader:6.2.4

webpack.config.js

 var webpack = require('webpack'); var path = require('path'); var nodeModules = {}; fs.readdirSync('node_modules') .filter(function(x) { return ['.bin'].indexOf(x) === -1; }) .forEach(function(mod) { nodeModules[mod] = 'commonjs ' + mod; }); module.exports = [ { entry: { 'app_bundle': './server.js' }, target: 'node', query: { cacheDirectory: true, presets: ['es2015'] }, module: { loaders: [ { test: /\.js$/, loader: 'babel', exclude: /node_modules/ } ] }, resolve: { extensions: ['', '.js'] }, output: { path: './', filename: '[name].js' }, externals: nodeModules }, { entry: [ './src/index.jsx' ], target: 'web', query: { cacheDirectory: true, presets: ['es2015'] }, module: { loaders: [ { test: /\.jsx?$/, exclude: /node_modules/, loader: 'babel' }, { test: /\.css$/, loader: 'style!css!autoprefixer' }, { test: /\.(woff|woff2)$/, loader: "url-loader?limit=10000&mimetype=application/font-woff" }, { test: /\.ttf$/, loader: "file-loader" }, { test: /\.eot$/, loader: "file-loader" }, { test: /\.svg$/, loader: "file-loader" } ] }, resolve: { alias: { 'react': path.join(__dirname, 'node_modules', 'react') }, extensions: ['', '.js', '.jsx'] }, output: { path: __dirname + '/public', publicPath: '/', filename: 'webpack_bundle.js' } } ]; 

错误跟踪告诉我,错误是由我的app.js文件中的生产error handling程序处理的:

 // production error handler app.use(function(err, req, res, next) { console.log(err); res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); 

我console.log与以下输出错误:

 { [Error: Failed to lookup view "error" in views directory "/views"] view: View { defaultEngine: 'ejs', ext: '.ejs', name: 'error', root: '/views', engine: [Function], path: undefined } } 

查看引擎设置

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

我不知道如何开始debugging…

我相信答案在于webpack如何处理特殊的__dirname全局variables。 Webpack的默认行为是用“模拟”值/replace__dirname 。 这可以从你明确的地方看到,它在/viewsrootfind一个文件,而不是./views

解决scheme是将以下部分添加到您的webpackconfiguration:

 node: { __dirname: true } 

以下是解释此行为的文档: https : //webpack.github.io/docs/configuration.html#node