在NodeJS中执行webpack编译的包
我想为我的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中工作?
我使用节点克隆作为外部库。 它不使用任何其他库作为依赖。 但是在它的包中的webpack使得缓冲区成为这个lib的依赖。 并在buffer
代码中,我得到了错误Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined
。 这是因为在nodeJS (function() { return this; }())
返回undefined
。
默认情况下,webpack将打包浏览器。 如果要使用webpack构buildNode库,则需要在configuration中指定一个target
:
module.exports = { // ... target: 'node', };