Может ли библиотека Javascript условно импортировать модуль, только если от него зависит его родительское приложение? - PullRequest
0 голосов
/ 21 апреля 2020

Скажем, у меня есть библиотека с именем library, которая используется в приложении с именем app, последнее из которых является интерфейсным приложением, использующим, например, Webpack, и npm для управления зависимостями.

То, что я хотел бы сделать, это сделать для library вызов import('sibling').then(/* ... */).catch(/* ... */), когда один раз выполняется фрагмент кода, если app зависит от sibling, и другой фрагмент кода, когда app не не список sibling в качестве зависимости.

Для иллюстрации, структура каталога:

app
|
| - node_modules
| | - library # does a call import('sibling')
| | - sibling # might not be present

Возможно ли это сегодня, и если да, при каких условиях?

1 Ответ

0 голосов
/ 22 апреля 2020

Оказывается, что на самом деле возможно, но то, как я это делал, привело к его поломке. В частности, library сначала установил const moduleName = 'sibling';, и только потом сделал звонок на import(moduleName). Однако, по крайней мере, Webpack (который я использовал для app), кажется, разрешает модули во время сборки, а не во время выполнения. Другими словами, он специально ищет вызовы import('sibling') во время сборки, а затем делает указание на правильный модуль.

Другими словами, import() должен либо получить имя файла в качестве параметра (независимо от того, о том, является ли это результатом выражения), или имя модуля в виде литеральной строки. Тогда настройки, которые я описал в этом вопросе, должны работать, по крайней мере, с Webpack.

...