Как установить порядок, в котором файлы упаковываются во время сборки в Angular

#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. Это сделало это.