2016-01-11 52 views
1

我想爲我的ReactJS應用程序實現服務器端渲染。我使用react-router。我將routes.js作爲webpack入口點,並使用output.libraryTarget = "commonjs2"選項進行編譯。然後我需要在NodeJS腳本中編譯的結果進行渲染。但我有錯誤。 在下面的代碼的WebPack渦卷模塊:在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作爲外部庫。它不使用任何其他庫作爲依賴。但是在它的包中的webpack使得buffer成爲這個lib的一個依賴。並且在buffer代碼中,我得到了en錯誤Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined。發生這種情況是因爲在nodeJS (function() { return this; }())中返回undefined

+1

你試過'目標:「node''在你的WebPack配置? –

+0

這正是我想要的:)謝謝@JoshDavidMiller –

+0

太棒了!我把這個作爲答案放在下面,這樣我們可以讓其他人知道它已經解決了。 –

回答

5

默認情況下,webpack將打包瀏覽器。如果你想建立節點庫具有的WebPack,你需要在配置specifiy一個target

module.exports = { 
    // ... 

    target: 'node', 
};