JS динамический импорт плагинов - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь создать стороннее расширяемое приложение, поэтому я работаю над системой плагинов с Django в качестве бэкэнда и Javascript / Vue / Webpack в качестве внешнего интерфейса.

Теперь у меня есть команда Django, которая собираетвсе плагины Javascript (которые находятся в asubdir каждого внутреннего приложения Django) и на лету создают файл js, который выглядит следующим образом:

// plugins.js

module.exports =[
  '../../medux/plugins/blah/frontend/medux-plugin-blah',
  '../../medux/plugins/foo/frontend/medux-plugin-foo',
]

Теперь я хочу, чтобы мое основное приложение js импортировало эти файлы динамически.

import("medux-plugin-foo")

работает, так как medux-plugin-foo (все плагины внешнего интерфейса) также устанавливается через npm.

import foo from medux-plugin-foo

работает в любом случае.

Что не работает, так это импортэтот массив из main.js, перебирая его и импортируя все его содержимое:

// main.js

import plugins from "../plugins"
for (var x in ["plugins"]) {
  import(plugins[x]).then((module) => {
    module.init()
  })
}

Я также пробовал что-то вроде

import(`../${plugin[x]}`)
// or
var plugin = plugins[x]
import(`../${plugin}`)

Я даже создал функцию, в которой аргументом является плагин- Я слышал, что тогда импорт (переменная) должен работать

function loadPlugin(p) {
  import(p)
}

Ничего не работает.

Это потому, что динамический импорт не поддерживает переменные - что является полной чушью ИМХО. Есть ли способ сделать то, что я хочу?

Моя цель просто: импортировать (динамически изменяющийся, но при запуске определяется сервером) список модулей и вызвать там функцию (например, зарегистрировать этот плагин).

Есть несколько пакетов, которые нацелены сделать что-то подобное, но я не смог заставить их работать: architect , ScaleApp , js-plugins - всеиз которых полностью устарели, не обслуживаются или усложняются.

...