#angular #deployment #build
#angular #развертывание #сборка
Вопрос:
У меня есть проект Angular, который должен поддерживать локализацию. Для этого мы загружаем переводы из файлов json перед загрузкой модуля. В main.ts я добавил следующие строки:
loadTranslationsFromJson(extractUserLocale(), 'assets/i18n').then(m => {
platformBrowserDynamic()
.bootstrapModule(AppModule)
.catch(err => console.error(err));
});
Все работает, за исключением некоторых переменных const, объявленных в службах вне класса. Например:
const commonPhrase = $localize`Enter your birthday`;
@Injectable()
export class OnboardingService {
// any variables declared here with $localize work fine
}
Как я понимаю в примере выше, поскольку const commonPhrase
загружается во время загрузки / компиляции Javascript во время браузера, он не является частью модуля Angular, поэтому он создан перед вызовом bootstrapModule(AppModule)
. Поскольку переменная результата commonPhrase
не будет переведена.
Это говорит мне, что если я смогу убедиться, что в развернутом пакете (который представляет собой большой JS-файл) мой файл main.ts вводится первым (таким образом, сначала будет выполняться браузером) Я могу решить эту проблему. Есть ли способ во время сборки указать порядок, в котором файлы добавляются в пакет? Или как разместить main.ts первым в пакете?
Комментарии:
1. почему вы не можете объявить его внутри класса service как свойство readyonly? поскольку вы не экспортируете эту константу, вы можете сохранить ее внутри класса как свойство только для чтения.
2. Я лично могу, но поскольку у нас около 20 разработчиков, кто-то допустит эту ошибку. Я предпочитаю автоматизировать или устранить потенциальный источник ошибок. Если я не могу найти решение, я вернусь к его применению через PRs.
3. создайте метод для интернационализации такой строки по всему миру и оберните вокруг нее свою строку. вы не можете управлять этим другим способом.
Ответ №1:
Понял ответ. Это не порядок модулей / файлов в ht ebuild, а порядок, в котором они активированы / импортированы. Если вы посмотрите на main.js который является вашим пакетом для основного модуля приложения, вы увидите там все модули / serice / componets и т.д. в виде hashmap. Порядок не имеет значения, но я обнаружил, что важно, какой модуль импортирован первым. Я создал отдельный модуль для локализации начальной загрузки и добавил его в качестве верхнего импорта для AppModule. Это сделало это.