使用在Monorepo中相互依赖的esm软件包进行开发的最佳实践

时间:2020-03-27 08:27:44

标签: node.js babeljs lerna monorepo

我想找出在monorepo中开发的最佳便捷方法。

想象一下以下情况:

结构如下:

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

所有软件包的源代码都在es模块中编写。但是在发布之前,应通过babel将代码转换为commonjs。(例如,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

在开发环境时也许有什么办法,要求a指向源代码条目,在生产环境时,它指向转换后的条目?

// 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();

0 个答案:

没有答案