Динамически загружать новые модули с сервера во время выполнения с Angular 9 - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть приложение Angular 9.

I Динамически прекомпилированные (angular9) библиотеки с отложенной загрузкой

Все предварительно скомпилированные библиотеки находятся в каталоге с именем "customModules"

ModuleSchemaStoreService.getAll()
      .map(dri => {
        console.log(`Dynamically loading ${dri.name}`);

        const moduleName = `${dri.name.charAt(0).toUpperCase() + dri.name.slice(1)}Module`;
          return {
            path: dri.name, 
            loadChildren: () => import(`../../customModules/${dri.name}.umd`).then(m => m[moduleName].config({
              params: dri.config
            }))
          };
      })

Моя проблема в том, что, если я добавляю предварительно скомпилированные библиотеки в каталог customModules после процесса сборки, я получаю сообщение об ошибке, что модуль не может быть найден.

Когда Я смотрю в файлах сборки, я вижу это:

 if (console.log("Dynamically loading ".concat(e.name)), e.external) {
          var t = "".concat(e.name.charAt(0).toUpperCase() + e.name.slice(1), "Module");
          return {
            path: e.name, loadChildren: function () {
              return r("rP3G")("./".concat(e.name, ".umd")).then((function (r) {
                return r[t].config({params: Object.assign(Object.assign({}, x.a), e.config)})
              }))
            }
          }
        }

И когда я смотрю в rP3G, я вижу это:

 rP3G: function (e, t, r) {
    var n = {"./credits.umd": ["8kkK", 0, 3, 16], "./support.umd": ["gbI0", 0, 3, 17]};

    function i(e) {
      if (!r.o(n, e)) return Promise.resolve().then((function () {
        var t = new Error("Cannot find module '" + e + "'");
        throw t.code = "MODULE_NOT_FOUND", t
      }));
      var t = n[e], i = t[0];
      return Promise.all(t.slice(1).map(r.e)).then((function () {
        return r.t(i, 7)
      }))
    }

    i.keys = function () {
      return Object.keys(n)
    }, i.id = "rP3G", e.exports = i
  }

"/ credits.umd" и "./support. umd "- это предварительно скомпилированные библиотеки, которые существовали в папке" customModules "во время сборки.

Кажется, что процесс сборки предварительно отображает все файлы в каталоге (customModules). Это приводит к тому, что, если я добавлю больше предварительно скомпилированных библиотек в этот каталог после сборки, они не будут найдены (их нет в списке предварительно сопоставленных файлов).

Я хотел бы иметь возможность добавить предварительно скомпилированные библиотеки в мой каталог "customModules" и загружают их во время выполнения.

Спасибо

...