Сделать беседу с npm с помощью браузера

Мы оба благословлены и прокляты множеством решений для управления пакетами для JavaScript, все с их соответствующими достоинствами. По причинам, которые здесь неактуальны, я остановился на npm для своего основного решения. Однако в других системах, таких как bower и component, слишком много хорошего кода, чтобы игнорировать эти решения. Итак, я ищу настроить среду, в которой я могу использовать браузер, чтобы загружать пакеты из npm и bower (мы сохраним компонент для другого вопроса).

Лучшее, что я придумал, это настроить package.json с postinstall script, который запускает bower install:

{
  ... configuration ...

  "scripts": {
    "postinstall": "bower install"
  }
}

Это создает правильную структуру каталогов при установке зависимостей первого уровня (т.е. зависимостей между силовыми решетками и зависимостями прокрутки npm):

- MyMixedComponent
  - main.js
  - package.json
  - node_modules
    - npmDependency
  - bower_components
    - bowerComponent

Что строит отлично, используя debowerify transform при браунировании, browserify -t debowerify Однако, когда я хочу установить MyMixedComponent из npm в другой project, npm install MyMixedComponent, структура каталогов построена так, как вы ожидали бы от npm:

- MyNewProject
  - main.js
  - package.json
  - node_modules
    - MyMixedComponent
      - main.js
      - package.json
      - node_modules
        - npmDependency
      - bower_components
        - bowerComponent

Поскольку bower - это плоское дерево зависимостей, это, конечно, не работает при попытке построить с помощью браузера и debowerify. На самом деле нужно что-то вроде этого:

- MyNewProject
  - main.js
  - package.json
  - node_modules
    - MyMixedComponent
      - main.js
      - package.json
      - node_modules
        - npmDependency
   - bower_components
     - bowerComponent

В качестве альтернативы debewify можно было бы изменить, чтобы распознать несколько каталогов на гитаре, но это может привести к поражению прекрасной характеристике беседки, что это плоское дерево, что намного лучше для зависимостей переднего конца. Любые мысли о том, как это может работать, или я просто молюсь о том, чтобы мы все когда-нибудь договорились об управлении зависимостями?

Ответ 1

Идея иметь несколько элементов bower_components в одной и той же кодовой базе, имеет риск введения дубликатов некоторой конкретной структуры.

Попробуйте пойти по дороге:

  • При установке смешанного пакета (npm и bower) в мой текущий пакет
  • Установите npm как обычно (вложенный),
  • И для каждого компонента-боувера из смешанного пакета bower install в корень текущего пакета
  • интерактивная npm postinstall script, может просто изменить bower.json текущего пакета
  • И предупредите пользователя о необходимости установки bower, так как bower.json теперь обновляется с компонентами другого вашего пакета npm/bower.