Как бороться с абсолютным импортом при использовании git субмодулей - PullRequest
0 голосов
/ 20 января 2020

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

в подмодуле:

/src/main.js
import Component from 'src/components/Component'
export default ...

И в родительском проекте

import Main from 'submodule/src/main'
...

это приведет к Unable to resolve module, так как src / components / Component не существует. есть ли обходной путь?

1 Ответ

1 голос
/ 20 января 2020

Я предлагаю не помещать эти пути в подмодуль, а вместо этого загружать эти зависимости во время выполнения. Таким образом, вы можете указать пути, когда вы их называете. Этот шаблон называется внедрение зависимостей

. Другим решением будет рефакторинг субмодуля, чтобы он вообще не зависел от внешних путей (это было бы самым чистым решением imho, но это не всегда возможно и эффективно)

Вот как бы вы реализовали DI в целом (Также я только что отметил, что ваш вопрос касается js, а не python. Помимо синтаксиса он должен работать так же, как и он) :

Предполагая, что ваш SubModule называется «mySubModule» и выглядит так:

import myModule

def myFunction(myParameter):
  myModule.doStuff()

с внедрением зависимостей это будет выглядеть так:

def myFunction(myModule):
  myModule.doStuff()

каждый раз, когда вы Для вызова myFunction вы должны указать модуль myModule в качестве параметра. Например:

import mySubModule
import myModule
mySubModule.myFunction(myModule)

Вы также можете сделать это с помощью глобальной переменной внутри вашего подмодуля:

myModule = None
def myFunction(myParameter):
  myModule.doStuff()

, прежде чем вы вызовете myFunction в первый раз, вам придется установить модуль снаружи. Например:

import mySubModule
import myModule
mySubModule.myModule = myModule
mySubModule.myFunction(myModule)

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

...