Когда вы запускаете свое приложение в процессе разработки, процесс сборки осуществляется с помощью веб-пакета / пакета / любого другого инструмента, который вы используете.
Эти инструменты позволяют вам (с помощью плагинов) делать что-то вроде импорта css в javascript, а затем, в конце концов, выплевывать его обратно как css. Это не нативная особенность JavaScript.
Jest работает на узле js, который не обладает всеми функциями веб-пакета и не может анализировать raw css и т. Д.
Итак, когда у вас была ошибка "SyntaxError: /Users/thiagofacchini/Documents/atomix/src/library/atoms/Label/styles.css: Support for the experimental syntax 'decorators-legacy' isn't currently enabled (2:1):"
, это на самом деле nodejs, пытающийся проанализировать CSS как javascript! Вы можете прочитать больше о том, что это было, хотя вы делали здесь https://www.sitepoint.com/javascript-decorators-what-they-are/
Так как вы управляете CSS в вашей среде jest?
в конфигурации jest вы настроили ее так, чтобы не импортировать css, а вместо этого импортировать пустой модуль.
сначала установите npm install-obj-proxy
, а затем добавьте следующее в свой jest.config.js
moduleNameMapper: {
"\\.css$": "identity-obj-proxy",
"^lodash-es$": "lodash"
},
Крутой. Я бы выгрузил двоичный файл и использовал сериализацию XML (более простую в управлении, терпимую к изменениям, которые не слишком экстремальны, например, добавление/удаление полей). В более крайних случаях проще написать преобразование (возможно, xslt) из одной версии в другую и сохранить классы в чистоте. Если требуется непрозрачность и небольшой размер диска, вы можете попытаться сжать данные перед записью на диск.
Это - действительно старый вопрос, но ему нужен актуальный ответ так или иначе; я знаю, что это отклоняется немного вне темы, так терпите меня. Сегодня, в 2019: Я предложил бы людям, которые, оказывается, читают это на этапе в Вашем проекте, где это довольно выполнимо для серьезного рассматривания использование Protobuf вместо BinaryFormatter
. Это имеет большинство преимуществ двоичного формата (который это), но меньше из недостатки .
, Это имеет хорошо продуманную стратегию обработки повреждающихся изменений (добавляющий/удаляющий поля, и т.д.) способом, который означает, что для "версии x " Вашего программного обеспечения намного легче обработать "версию y " - сгенерированные данные и наоборот . Да, это на самом деле верно: более старая версия Вашего приложения сможет обработать данные, сериализированные с более новой версией определения интерфейса Protobuf .proto
. (Несуществующие поля будут просто проигнорированы при десериализации.)
Для сравнения, при выполнении более новых версий кода и десериализации старых данных, "не - существующие" поля в данных будут установлены на свое определенное для типа значение по умолчанию. В этом смысле обработка старых данных не является "полностью автоматической" в этом смысле, но все еще намного более простой , пользуясь двоичными библиотеками сериализации по умолчанию, включенными с платформами как Java и.NET.
, Если Вы предпочитаете недвоичный формат, JSON часто является подходящим выбором. Для RPC и таких сценариев, Protobuf лучше, хотя и даже официально упоминается/подтверждается Microsoft в наше время: Введение в gRPC на Ядре ASP.NET . ( gRPC является технологическим стеком, созданным сверху Protobuf)
В нашем приложении возникла та же проблема с сохранением данных профиля пользователя (расположение столбцов сетки, настройки фильтра...).
В нашем случае проблема была в AssemblyVersion.
Для этой проблемы я создаю SerializationBinder
, который считывает актуальную версию сборки
сборки (все сборки получают новый номер версии при новом развертывании)
с Assembly.GetExecutingAssembly().GetName().Version
.
В переопределенном методе BindToType
информация о типе создается с новой версией сборки.
Десериализация реализована «вручную», это означает
Работает со всеми нашими данными начиная с трех или четырех релизов.