WedX - журнал о программировании и компьютерных науках

npm peerDependencies во время разработки

Настройка:

Пакет models

  • Распространенные модели мангуста, используемые в нескольких приложениях
  • peerDependencies: «мангуст»

Пакет app

  • зависимости: «мангуст», «модели»
  • Связано с моделями через app> npm link models

Проблема:

При разработке models мне нужно установить mongoose в node_modules, иначе он не сможет найти mongoose.

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

Я делаю эту работу сейчас: устанавливаю mongoose при разработке models, а затем удаляю его при использовании под app. Я изучил parent-require, но это, похоже, решает только проблему с npm-ссылкой, которая не находит пакет от родителя, а не проблему с необходимостью удаления / установки node_module (или я делаю это неправильно?)

Связано: Совместное использование экземпляра Mongoose между несколькими пакетами NPM

05.09.2014

Ответы:


1

Я стал использовать require.main.require вместо require для модулей, которым нужен общий экземпляр.

Например, require.main.require('mongoose') гарантирует, что используется только мангуст верхнего уровня.

12.09.2014
  • Для тех, кто пришел сюда из Google, есть хорошие новости. Node v6 может, наконец, включать исправление для этой ошибки.. 21.04.2016

  • 2

    В случае, если вы получите ошибку

    require.main.require is not supported by webpack
    

    ... вызовите npm link <required module> в корневом каталоге вашего модуля

    Например. У меня была такая же проблема с peerDependency react. Я сделал npm link reack для своего локального модуля, и он сработал.

    01.09.2018

    3

    Вот модуль, который вы можете использовать, который имеет дело с родительскими модулями и модулями дедушки и бабушки, которые связаны

    /**
     * the original module scope
     */
    const _BASE_MODULE = module;
    
    /**
     * the top level module (fixes nasty peer dependency issues with npm link)
     */
    const _MODULE = topLevelModule();
    
    /**
     * find topmost module scope
     */
    function topLevelModule() {
        let _mod = _BASE_MODULE;
    
        while (_mod.parent) {
            _mod = _mod.parent;
        }
    
        return _mod;
    }
    
    /**
     * cheap way to check if the module is available,
     *
     * @param {string} mod module name
     * @return {boolean}
     * @todo if we need better then we should switch to browserifys resolve package, but thats heavy
     */
    export function isAvailable(mod) {
        try {
            _MODULE.require.resolve(mod);
    
            return true;
        } catch (e) {
            return false;
        }
    }
    
    /**
     * requires a module from the top level scope
     * @param {string } mod module name
     * @return {*}
     */
    export function topLevelRequire(mod) {
        return _MODULE.require(mod);
    }
    
    05.02.2019
    Новые материалы

    Как создать диаграмму градиентной кисти с помощью D3.js
    Резюме: Из этого туториала Вы узнаете, как добавить градиентную кисть к диаграмме с областями в D3.js. Мы добавим градиент к значениям SVG и применим градиент в качестве заливки к диаграмме с..

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

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

    Объяснение документов 02: BERT
    BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..


    Для любых предложений по сайту: [email protected]