Я разрабатываю модуль, в котором нет сборки, которую импортирует пользователь.Вместо этого он импортирует отдельные компоненты, а затем связывает их вместе со своим кодом.Однако эти компоненты совместно используют утилиты, и я хочу импортировать их, не проходя через ад относительного пути.
Я знаю, что это довольно распространенный вопрос, и я провел некоторое исследование.Предположим, у меня есть 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?