Как установить область по умолчанию / резервную область для имен пакетов с помощью Node require () - PullRequest
0 голосов
/ 12 февраля 2019

Я использую определенный модуль в своем коде Node:

const example = require('example');

Однако этот модуль медленно обновляется, поэтому я разбудил его и опубликовал его с моими обновлениями под собственной областью на npmjs.ком.Однако теперь, чтобы использовать свой собственный модуль, я должен изменить каждое использование в моем коде:

const example = require('@my-username/example');

Проблема в том, что мне придется зафиксировать кучу изменений во многих файлах, чтобы переименовать модуль, затемкогда апстрим объединяет мои изменения с официальной версией, мне придется снова обновить свой код, чтобы удалить оператор области действия из require() для всех этих файлов, а затем добавить его обратно, если у меня есть другие изменения, которые медленно принимаются, и т. д..

Есть ли способ, которым я могу сказать Node или NPM, что если require() не может найти модуль без области в имени, чтобы затем проверить все папки @scope в node_modules, чтобыпосмотреть, есть ли совпадение?

Если бы это было возможно, мне нужно было бы только обновить package.json соответствующей версией пакета, и сам код мог остаться неизменным, когда я переключаюсь между своей форком и официальной версией.

1 Ответ

0 голосов
/ 12 февраля 2019

вы можете реализовать это, используя module-alias

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

const moduleAlias = require('module-alias')

// Custom handler function (starting from v2.1)
moduleAlias.addAlias('request', (fromPath, request, alias) => {
  console.log({
    fromPath,
    request,
    alias,
  });

  return __dirname + '/my-custom-request'
})

require('request')
...