Babel не находит плагин

У меня есть модуль приложения и общий модуль, который используется несколькими модулями приложения.

- app
  - src
  - package.json
  - webpack.config.json
  - .babelrc
- common
  - lib
  - package.json
  - .babelrc

приложение/package.json

dependencies: {
  common: "../common"
},
devDependencies: {
  ...othe deps,
  "babel-plugin-transform-object-rest-spread": "^6.23.0",
}

общий/package.json

devDependencies: {
  ..other deps,
  "babel-plugin-transform-object-rest-spread": "^6.23.0",
}

общий код находится в es6 и должен быть перенесен в приложение, поэтому webpack.config.js содержит

{
  test: /\.js/,
  exclude: /node_modules\/(?!(ui-common|ui-server-common)\/).*/,
  loader: 'babel-loader',
},

Все работает нормально, если я запускаю установку пряжи в общем модуле, а затем в модуле приложения. Это копирует полные node_modules общего модуля, поэтому он содержит все отладочные файлы, включая babel-plugin-transform-object-rest-spread.

Если я удаляю node_modules из общего модуля, запускаю модуль приложения yarn install app, копируются только зависимости prod, а babel-plugin-transform-object-rest-spread отсутствует в app/node_modules/common/node_modules. тогда я получаю

Module build failed: ReferenceError: Unknown plugin "transform-object-
rest-spread" specified in "/Users/blaf/projects/management-
ui/ui-common/.babelrc" at 0, attempted to resolve relative to 
"/Users/blaf/projects/management-ui/ui-common"

потому что в app/node_modules/common/node_modules отсутствует babel-plugin-transform-object-rest-spread. Пакет уже находится в app/node_modules, поэтому проблем быть не должно, но Babel хочет, чтобы он был прямо в общем пакете? Как я могу сказать Babel использовать зависимость корневого уровня?


person T. Vojtech    schedule 09.08.2017    source источник
comment
Это похоже на ожидаемое поведение. Babel ищет плагины относительно файла .babelrc, поэтому, если их нет в common, это не сработает.   -  person loganfsmyth    schedule 09.08.2017
comment
Есть ли способ сказать Babel, чтобы он смотрел на команды высшего уровня? Node.js пытается найти зависимость на верхнем уровне, если она отсутствует на месте. Проблема в том, что yarn/npm выполняет дедупликацию, и плагин завершает работу только на верхнем уровне.   -  person T. Vojtech    schedule 13.08.2017