Создайте уникальный ключ локального хранилища для каждого веб-приложения - PullRequest
0 голосов
/ 05 ноября 2018

Я делаю пакет NPM, который должен сохранять информацию в локальном хранилище браузера для использования такими веб-платформами, как Angular, React и Vue. Проблема в том, что я не знаю, как правильно генерировать ключ. Я думал о создании UUID для сохранения в качестве ключа локального хранилища, но если пользователь откроет два окна с одним и тем же веб-приложением, то они сгенерируют два разных UUID, поэтому у них будут разные хранилища. Я также думал о том, чтобы просто использовать имя с жестким кодом, потому что localstorage не разделяется между доменами, но если пользователь тестирует свое приложение в localhost, то хранилище может быть смешано с другим приложением, которое он также тестировал в localhost. Можно ли узнать имя пакета, который вызывает мой пакет, чтобы я мог с этим сгенерировать ключ локального хранилища? Я не хочу просить у разработчика уникальный ключ локального хранилища, когда он использует мой пакет!

1 Ответ

0 голосов
/ 05 ноября 2018

Не зная вашего полного варианта использования, трудно сказать, но если я правильно понимаю, вы хотите создать пакет, я назову его fooLib, и вас беспокоит, используется ли этот проект в projA и projB:

Если вы используете статический ключ, например fooLibKey:

  • projA и projB будут использовать одно и то же хранилище

Если вы используете динамически сгенерированный ключ, такой как UUID:

  • Каждый раз, когда вы перезагружаете страницу, вы теряете свой магазин.

Я подозреваю, что вам следует разрешить зависимым проектам (projA, projB и т. Д.) Настроить ключ:

// in projA
import fooLib from 'foo-lib'

fooLib.init({
  keyName: 'projAFooLib',
})

Нет надежного способа получить имя клиентского пакета. В проекте Node вы могли бы идти вверх до тех пор, пока не найдете файл package.json и попытаться вывести его из этого, но это довольно рискованно, и реального способа сделать это в браузерном проекте не существует.

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