在NodeJS中执行webpack编译的bundle

时间:2016-01-11 09:39:38

标签: node.js reactjs webpack serverside-rendering

我想为我的ReactJS应用程序实现服务器端呈现。我使用fseek。我将react-router作为webpack入口点并使用routes.js选项进行编译。然后我需要NodeJS脚本中的编译结果来进行渲染。但是我错了。 Webpack将模块包装在以下代码中:

output.libraryTarget = "commonjs2"

当NodeJS尝试执行/* 277 */ /***/ function(module, exports, __webpack_require__) { /* WEBPACK VAR INJECTION */(function(Buffer, global) { if (global.foo) { /* ... */ } /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(277).Buffer, (function() { return this; }()))) /***/ } 时,返回(function() { return this; }())。在浏览器中,它将返回undefined。为什么webpack使用这样的包装代码?如何使这个代码在NodeJS中工作?

我使用node-clone作为外部lib。它不会使用任何其他库作为依赖。但是它的bundle中的webpack使buffer成为这个lib的依赖项。在window代码中,我遇到了错误buffer。这是因为在nodeJS Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined中返回(function() { return this; }())

1 个答案:

答案 0 :(得分:6)

默认情况下,webpack会为浏览器打包。如果要使用webpack构建Node库,则需要在配置中指定target

module.exports = {
  // ...

  target: 'node',
};