3

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

/* 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; }())))

 /***/ }

当 NodeJS 尝试执行(function() { return this; }())它的 return 时undefined。在浏览器中它会返回window. 为什么 webpack 使用这样的包装代码?如何使这段代码在 NodeJS 中工作?

我使用节点克隆作为外部库。它不使用任何其他库作为依赖项。但是 webpack 在它的 bundle 中将buffer作为这个 lib 的依赖。在buffer代码中我遇到了错误Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined。发生这种情况是因为在 nodeJS (function() { return this; }())returnundefined中。

4

1 回答 1

7

默认情况下,webpack 会为浏览器打包。如果你想用 webpack 构建 Node 库,你需要target在你的配置中指定一个:

module.exports = {
  // ...

  target: 'node',
};
于 2016-01-11T18:25:07.017 回答