Реагировать на сервер, веб-пакет

0

Я хочу отобразить приложение React на сервере и проблемы с обработкой зависимостей.

Точнее, я хочу загрузить jquery из cdn и иметь возможность делать

require('jquery')

в моих файлах приложений. Все работает хорошо на стороне клиента, у меня есть файл конфигурации webpack, который выглядит так:

# webpack.config.js 
externals : {
    "jquery": "jQuery",
}

и jquery просто загружается в html файл:

# index.html
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>

Я не могу сделать эту работу серверной. Если я хорошо понимаю, это не имеет никакого отношения к веб-пакету, который является только пакетом, и его задача - не загружать файлы. Еще раз, если я хорошо понимаю, это должно быть сделано моим узловым сервером, который фактически отображает компонент React.

# server.js
var reactRender = require('react-render');
reactRender({path: '/abs/path/to/component.js', ...});

Проблема в том, что require ('jquery') не работает в этом контексте. Здесь (используя webpack на стороне сервера nodejs) я нашел пример того, как использовать webpack serverside, но он не затрагивает проблему внешних компонентов, не установленных в node_modules.

Я также попытался использовать script.js(https://github.com/ded/script.js), чтобы сначала загрузить jquery из CDN, а затем отобразить приложение, но для этого требуется компонент документа, который является неопределенным сервером.

# this does not work
$script(['https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js'], 'bundle');
$script.ready('bundle', function() {
    reactRender(...)
});

Любая мысль очень ценится! благодаря

  • 1
    После ответа я понял, что вам действительно нужно использовать функциональность jquery на стороне сервера, верно? Если это так, я могу предоставить другой ответ, который может работать для вас.
  • 0
    Привет cspotcode, конечно, мне нужен сервер jquery. Спасибо!
Показать ещё 1 комментарий
Теги:
webpack

2 ответа

2
Лучший ответ

Раньше я использовал домино в сочетании с jquery для управления HTML-сервером. Domino - это реализация DOM для JavaScript. Я не эксперт по реагированию, но это может сработать для вас:

npm install --save domino jquery

А потом:

// Create a window object.  See also: https://github.com/fgnass/domino#usage
const domino = require('domino');
const window = domino.createWindow('');
const document = window.document;

// Create a jquery instance
const $ = require('jquery')(window);
  • 0
    Спасибо cspotcode, я посмотрю и приму ответ!
0

почему не просто условно установить свойство externals основанное на том, где вы вызываете webpack? используя переменную среды или что-то

  • 0
    Вы имеете в виду что-то вроде try {var $ = require ('jquery')} catch (e) {var $} в моих файлах? Проблема в том, что мне это нужно на стороне сервера.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню