2014-09-26 4 views
1

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

Можно ли просто изменить модуль, к которому относится имя, чтобы, когда node.js видит require ('moduleA'), он фактически загружает 'moduleB' вместо этого? Теперь я знаю, что это вызовет именование ада, потому что любой, кто работает над проектом, увидит require ('moduleA') и не будет знать, что реальный модуль, загружаемый, был 'moduleB', поэтому, в конечном счете, вы, вероятно, захотите пойти с первым решение. Предполагаемый вариант использования, если вы хотите попробовать несколько альтернатив для совместимых с API модулей, чтобы измерять производительность вашего приложения (например) с каждым модулем.

ответ

2

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

Вместо использования require("underscore"); всей вашей кодовую, требуют локального файла вместо того, чтобы как require("./lib/underscore");, и есть этот файл условно реэкспорт подчеркивания или другая библиотека:

if (global.USE_LODASH) { 
    module.exports = require("lodash"); 
} else { 
    module.exports = require("underscore"); 
} 

Если это разовая вещь, чтобы попробовать альтернативную библиотеку, прежде чем принимать решение о SWI чик, и вы хотите, чтобы сделать этот тест быстро первый без найти-и-замены во всех ваших файлов:

Перейти в папку node_modules, удалить или переименовать папку underscore и сделать символическую ссылку с именем подчеркивание для замены папке модуля. Я не рекомендую это в качестве долгосрочного решения: запуск npm install снова, скорее всего, отменит этот взлом, и большинство проектов предпочитают не проверять папку node_modules в своем исходном репозитории.

0

Попробуйте использовать модуль mock-require.

Смежные вопросы