Лучшая практика для разработки с пакетами esm, которые глубоко взаимозависимы в monorepo - PullRequest
0 голосов
/ 27 марта 2020

Я хочу найти лучший и удобный способ развития в монорепо.

Представьте себе следующий сценарий:

структура выглядит следующим образом:

.
└── packages
    ├── a
    │   ├── lib
    │   └── src
    ├── b
    │   ├── lib
    │   └── src
    └── ui
        ├── index.js
        └── src

исходный код всех пакетов написан в модуле es. но перед публикацией sh код должен быть преобразован в общий js с помощью babel (например, main свойство в package.json должно быть lib/index.js)

Вопрос в том, что если ui зависит от a, а a зависит от b. Когда я начинаю развиваться с ui, a должен быть преобразован. При начале разработки с a необходимо преобразовать b ..

Например:

// module `ui`
import { foo } from 'a';
foo();

// module `a`
import { bar } from 'b';
export const foo = bar;

// module `b`
export function bar() {}
# now i want to start ui 
$ cd packages/b && npm run babel:watch
$ cd packages/a && npm run babel:watch
$ cd packages/ui && npm run start-dev-server

То, что я хочу, это просто

$ cd packages/ui && npm run start-dev-server

Может быть, есть ли способ, когда env находится в разработке, требовать a указывает на ввод исходного кода, когда env находится в производстве, он указывает на преобразованный ввод?

// module `ui`

// process.env.NODE_ENV === 'development'
// entry is `packages/a/src/index.js`
// process.env.NODE_ENV === 'production'
// entry is `packages/a/lib/index.js`

// btw. it must be also work
// import foz from 'a/foz';
import { foo } from 'a';
foo();
...