Есть ли способ полностью инкапсулировать React из объекта Window - PullRequest
0 голосов
/ 18 октября 2018

Я не думаю, что это возможно, но я просто хочу быть уверен.Я хочу использовать реакцию для создания виджетов, которые будут использоваться на клиентских сайтах.Когда я увидел, что библиотека реагирования была всего 5 КБ, я подумал об ее использовании.

Все еще работаю, но по разным причинам я не могу просто использовать реакцию для создания виджетов.Одна из основных причин заключается в том, что я хочу использовать lazy-loading для загрузки отсутствующих блоков виджетов, и более чем вероятно, что несколько виджетов от нас будут на одном веб-сайте, поэтому я не хочу загружать React несколько раз.

Теперь я знаю, что могу использовать browserify , чтобы изолировать реакцию от веб-сайта клиента, но я не уверен в этом.Если ничего не помогает, мы можем просто загрузить дырочное приложение (после компиляции с помощью browserify) и отбросить аспект отложенной загрузки, но это не то, чего я хочу, и не то, что от меня требуется.В спецификациях сказано, что нужно использовать ленивую загрузку ... если не в таких конкретных словах.

Так что да ... может быть, я что-то упустил.Есть ли способ изолировать базовую библиотеку React в ES5 или ES6 (наша поддержка браузера IE9 +)?Прямо сейчас из того, что я видел, это невозможно, но опять же, может быть, мне не хватает чего-то большого?Хотя я готов рассмотреть browserify, чтобы сделать это.

PS.Если ответ «нет», пожалуйста, объясните, почему я могу принять ответ.

1 Ответ

0 голосов
/ 21 октября 2018

Вы можете использовать browserifies externals & exclude для создания нескольких различных пакетов.Допустим, у вас есть widgetA.js и widgetB.js и оба require("react"), тогда вы можете сделать:

 $ browserify -r react > static/react.js
 $ browserify -x react widgetA.js > static/widgetA.js
 $ browserify -x react widgetB.js > static/widgetB.js

Теперь внутри страницы был виджетА, добавьте и реакцию, и виджет:

 <script defer src="./static/react.js" ></script>
 <script defer src="./static/widgetA.js" ></script>

Затем react.js кэшируется и не будет перезагружаться на других страницах, это решение «только для сборки», поэтому оно работает во всех браузерах (если там работает сам код).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...