Как избежать относительного импорта в модули, предназначенные для объединения? - PullRequest
1 голос
/ 26 сентября 2019

Я разрабатываю модуль, в котором нет сборки, которую импортирует пользователь.Вместо этого он импортирует отдельные компоненты, а затем связывает их вместе со своим кодом.Однако эти компоненты совместно используют утилиты, и я хочу импортировать их, не проходя через ад относительного пути.

Я знаю, что это довольно распространенный вопрос, и я провел некоторое исследование.Предположим, у меня есть module/components/foo/bar/baz/index.js, который хочет импортировать module/utils/helper.js

Опция 1

Просто используйте относительные пути и сделайте:

import helper from '../../../../utils/helper'

Опция 2

Используйте пакет module-alias и получите:

import helper from '@utils/helper'

Это будет работать в Node.js, поскольку модули разрешаются во время выполнения.Однако предположим, что у пользователя модуля есть Webpack и он импортирует модуль:

import component from 'module/components/foo/bar/baz'

Webpack не сможет разрешить @utils, если пользователь не укажет псевдоним в его собственном Webpack.конфигурации.Это было бы довольно неприятно.

Вариант 3

Использовать псевдонимы Webpack в webpack.config.js :

module.exports = {
  resolve: {
    alias: {
      '@utils': path.join(__dirname, 'utils')
    }
  }
}

Это будет работать нормально, если модуль был предустановлен .Но, как я упоминал ранее, я хочу, чтобы библиотека могла использоваться с импортом ES6, чтобы пользователи могли связывать только те части, которые им нужны.

Опция 4

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

import helper from 'module/utils/helper'

Кажется, это решает проблему, но я думаю, что это довольно плохое решение.Для разработки вам нужно создать символическую ссылку node_modules/module -> module.Я уверен, что это скрывает многие потенциальные проблемы, и соавторам также придется это делать вручную.


Есть ли способ избежать относительных путей при разрешении использования библиотеки с импортом ES6?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...