我想为我的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; }())
其返回时undefined
.在浏览器中它将返回window
.为什么webpack使用这样的包装代码?如何使这个代码在NodeJS中工作?
我使用node-clone作为外部lib.它不使用任何其他库作为依赖.但是它的bundle中的webpack使缓冲区成为这个lib的依赖项.在buffer
代码中,我遇到了错误Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined
.它发生是因为在nodeJS (function() { return this; }())
返回undefined
.
默认情况下,webpack会为浏览器打包.如果要使用webpack构建Node库,则需要target
在配置中指定:
module.exports = {
// ...
target: 'node',
};