我想为我的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; }())
。
答案 0 :(得分:6)
默认情况下,webpack会为浏览器打包。如果要使用webpack构建Node库,则需要在配置中指定target
:
module.exports = {
// ...
target: 'node',
};