Я хочу отобразить приложение 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(...)
});
Любая мысль очень ценится! благодаря
Раньше я использовал домино в сочетании с 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);
почему не просто условно установить свойство externals
основанное на том, где вы вызываете webpack? используя переменную среды или что-то