2016-09-08 2 views
5

Я создаю свое приложение с помощью отдельных микросервисов, каждый из которых имеет свои собственные репозитории и npm-зависимости и может быть на другом сервере.Как создать общий пакет.json для нескольких репозиториев npm

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

Возможно ли это?

ответ

7

К сожалению, npm не поддерживает указание родительского файла package.json. Такая особенность была proposed some time ago, но разработчики npm пришли к выводу, что это должно быть достигнуто с помощью внешних инструментов.

Конечно, вы можете написать такой инструмент самостоятельно. Существует одна из возможных aporaches:

  1. Создать библиотеку, которая содержит package.json файл со всеми общими зависимостями. В этом примере он будет называться shared-deps.

  2. Создать merge.js скрипт, который добавляет общие зависимости в локальный package.json файла и добавить его в shared-deps библиотеки:

    const fs = require('fs') 
    
    const localPackageJson = require('../../package.json') 
    const sharedPackageJson = require('./package.json') 
    
    Object.assign(localPackageJson.dependencies, sharedPackageJson.dependencies) 
    
    fs.writeFileSync('../../package.json', JSON.stringify(localPackageJson, null, 2)) 
    
  3. Добавить в package.json из приложения, которые будут использовать этот общие зависимости следующих после установки крюка:

    "scripts": { 
        "postinstall": "node ./node_modules/a/merge.js" 
    } 
    
  4. Теперь, когда вы запускаете npm install, ваши общие зависимости будут установлены тог эфир с библиотекой shared-deps, и ваш package.json будет обновлен после этого.


+0

большой, спасибо !! –

+0

Не понимаю. Если это помещено в postinstall, слияние выполняется * после завершения установки, и как будут установлены объединенные зависимости? Означает ли это, что нужно называть 2 npm install подряд? –

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