Как создать библиотеку npm с файлом конфигурации JS и веб-целью?

#javascript #reactjs #npm #webpack #rollup

#javascript #reactjs #npm #webpack #накопительный

Вопрос:

Я создал библиотеку JS пользовательского интерфейса, package.json все в порядке, я связываю ее с webpack , и она отлично работает в npm (прекрасно сохраняется в node_modules/library каталоге).

Тем не менее, я хотел бы сделать некоторые вещи настраиваемыми с помощью файла конфигурации. Допустим, в моей библиотеке есть Box компонент React (он отображает квадрат размером 100×100 с цветом фона):

 // Box.js
export default function(props) {
   return <div style={{
       backgroundColor: props.color,
       width: "100px",
       height: "100px"
   }}>
       {props.children}
   </div>;
}
  

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

Итак, пользователь моей библиотеки создает конфигурационный файл (назовем его library.config.js ) в корневом каталоге своего проекта, и этот файл имеет sth, подобный этому:

 // library.config.js
const BoxBackgroundColor = 'green';
export { BoxBackgroundColor }
  

И если этот файл существует, библиотека знает об этом, и пользователь может просто использовать Box вот так:

<Box />

и color prop будет зеленым.

Как добиться такого результата?

Проблема в том, что когда я объединяю свою библиотеку, я не знаю, существует library.config.js файл или нет. Эта информация доступна для пользователя моей библиотеки в проекте пользователя. Кажется, я хочу разрешить все операторы import and require в моей библиотеке, за исключением library.config.js . Это исключение require должно быть устранено на этапе объединения проекта пользователя (когда library.config.js файл доступен).

Комментарии:

1. У меня также есть этот вопрос…. Вам удалось найти ответ?

2. Эй, @HectorRicardo, нет, у меня нет, и я все еще думаю, что было бы неплохо иметь. В моих вариантах использования я просто передаю значения конфигурации через контекст React.

3. Также нуждающийся в этом, кому-нибудь удалось решить это?