2016-01-11 5 views
1

Я хочу реализовать рендеринг на стороне сервера для моего приложения ReactJS. Я использую react-router. Я принимаю routes.js как точку входа в webpack и компилирую с опцией output.libraryTarget = "commonjs2". Тогда мне требуется результат компиляции в сценарии NodeJS для рендеринга. Но у меня ошибка en. WebPack модули обруча в следующем коде:Выполнять пакет, скомпилированный в 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; }()))) 

/***/ } 

Когда NodeJS пытается выполнить (function() { return this; }()) его возвращение undefined. В браузере он вернет window. Почему webpack использует такой код обертки? Как заставить этот код работать в NodeJS?

Я использую node-clone как внешний lib. Он не использует никакие другие libs как зависимость. Но webpack в своем комплекте делает buffer в качестве зависимости для этой библиотеки. И внутри кода buffer у меня есть ошибка Cannot read property 'TYPED_ARRAY_SUPPORT' of undefined. Это происходит потому, что в узлеJS (function() { return this; }()) возвращается undefined.

+1

Вы пробовали 'цель:«node'' в вашем WebPack конфигурации? –

+0

Это именно то, что я ищу :) Спасибо @JoshDavidMiller –

+0

Отлично! Я поставил это как ответ ниже, чтобы мы могли позволить другим узнать, что он решен. –

ответ

5

По умолчанию веб-пакет упаковывает вещи для браузеров. Если вы хотите, чтобы строить библиотеки Node с WebPack, необходимо specifiy в target в конфигурации:

module.exports = { 
    // ... 

    target: 'node', 
};