webpack打包express项目时运行出错

新手上路,请多包涵

webpack文件如下:

var path = require('path');

module.exports = {
  entry: './app.js',
  output: {
    path: path.resolve(__dirname, 'build'),
    filename: 'app.js',
  },
  module: {
    loaders: [{
      test: /\.js$/,
      exclude: /node_modules/,
      loader: 'babel-loader'
    }]
  },
  node: {
    fs: "empty",
    net: 'empty'
  },
};

app.js:

import express from 'express';
const app = express();

app.get('/', function (req, res) {
  res.send('Hello World!');
});

var server = app.listen(3000, function () {
  var host = server.address().address;
  var port = server.address().port;

  console.log('Example app listening at http://%s:%s', host, port);
});

package.json:

{
  "name": "test",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "build": "webpack"
  },
  "author": "logging",
  "license": "ISC",
  "dependencies": {
    "babel-loader": "^7.0.0",
    "express": "^4.15.2"
  },
  "devDependencies": {
    "babel-core": "^6.24.1",
    "babel-preset-es2015": "^6.24.1",
    "webpack": "^2.5.1"
  }
}

编译完成之后,执行node build/app.js 报错

var req = Object.create(http.IncomingMessage.prototype)
                                            ^
TypeError: Cannot read property 'prototype' of undefined
    at Object.<anonymous> (/home/logging/git/douban/build/app.js:27651:45)
    at __webpack_require__ (/home/logging/git/douban/build/app.js:20:30)
    at Object.<anonymous> (/home/logging/git/douban/build/app.js:27472:11)
    at __webpack_require__ (/home/logging/git/douban/build/app.js:20:30)
    at Object.<anonymous> (/home/logging/git/douban/build/app.js:18434:18)
    at __webpack_require__ (/home/logging/git/douban/build/app.js:20:30)
    at Object.exports.byteLength (/home/logging/git/douban/build/app.js:19666:16)
    at __webpack_require__ (/home/logging/git/douban/build/app.js:20:30)
    at /home/logging/git/douban/build/app.js:66:18

请问该怎么解决?

阅读 4.3k
3 个回答

IncomingMessage应该是个对象类型,不存在prototype。

你这里哪里是编译你这是启动了一个web服务而已

新手上路,请多包涵

这是因为express包是运行在服务器环境中的,而webpack打包默认采用的是浏览器环境,需要在配置中增加target:"node"这项配置,启用服务器端编译。

webpack.config.js的配置参考下面:

module.exports = {
  entry: './app.js',
  ...
  target:"node",
  ...
  
};
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题