имитировать поведение fbasyncInit в связанной библиотеке веб-пакета - PullRequest
0 голосов
/ 20 декабря 2018

Я использую веб-пакет для создания библиотеки, предназначенной для браузеров.И я действительно хотел бы реплицировать поведение fbasyncinit без изменения вручную связанной библиотеки.

Предоставляет ли webpack какой-либо способ вызова функции после загрузки самой библиотеки?

Или есть другой альтернативный упаковщик, которыйпозволяет это?

Для тех, кто не знает, window.fbasyncinit - это функция, которую Facebook SDK вызывает после завершения загрузки, поэтому вы пишете функцию для инициализации содержимого Facebook SDK.

1 Ответ

0 голосов
/ 07 января 2019

В зависимости от настроек вы можете сделать вашу библиотеку внешней и лениво загрузить в целевое приложение.В двух словах это означает, что ваша библиотека существует вместе с приложением, но фактически не загружается при инициализации.Затем он может быть загружен событием или после некоторого setTimeout.

Webpack следит за специальными комментариями, чтобы сообщить ему, какой код должен быть разделен на его собственный пакет:

button.onclick = event => {
    const loadLodash = await import(/* webpackChunkName: "lodash" */ "lodash");
    console.log('lodash loaded');
};

Thisвид комментария, /* webpackChunkName: "lodash" */, является одним из таких типов.Обратите внимание, что до тех пор, пока не произойдет какое-либо событие или тайм-аут, ваша библиотека не будет загружена.

Если честно, я не делал этого, в частности, для библиотек, поэтому я не уверен в трудностях, которые могут возникнуть здесь.

Обновление

На самом деле, может быть более простой ответ на этот вопрос.Я забыл, что ленивая загрузка - это просто динамическое создание тега сценария с src для библиотеки, которую вы хотите загрузить (например, с помощью связанной библиотеки lodash).

var script = document.createElement('script');
script.src = 'http://localhost:8080/vendors.[hash].js';
document.head.appendChild(script);

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

Обновление 2

После перечитыванияэто также может быть так же просто, как запуск имитируемого поведения fbasyncinit после некоторого события, когда вы знаете, что библиотека загружена в приложение (при условии, что ваша библиотека не зависит от каких-либо сетевых вызовов для инициализации).Все остальные идеи также применимы, но могут быть более сложными, чем вам нужно.Перед тем, как попробовать внешние / ленивые решения, я бы посоветовал взглянуть на что-то простое в своей библиотеке:

window.addEventListener('load', event => {
    // your custom fbasyncinit behavior here
});

Это, конечно, после загрузки всего на странице, что может быть слишком позднов зависимости от ваших потребностей.

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