【发布时间】:2019-09-17 17:47:37
【问题描述】:
我正在尝试为 javascript monorepo 找出正确的方法。想象一下包含包/库的 monorepo:
root
- node_modules
- packages
+ lib-a
* node_modules
+ lib-b
* node_modules
现在假设lib-a 和lib-b 包都使用webpack 作为它们的构建工具。
我看到了两种方法
添加
wepback作为对根目录的依赖。在两个包中包含“构建”脚本:"build": "webpack -p --config webpack.config.js。webpack.config.js可以包括根webpack.config.js。然后我可以使用像lerna这样的工具从根目录运行构建(这意味着webpack二进制被识别。但是我将无法在特定包中运行构建,因为webpack在那里不可用。我可能会将构建脚本更改为"build": "../../node_modules/.bin/webpack -p --config webpack.config.js始终在每个包中包含
webpack。这意味着build脚本将成功。这也意味着每个包都有相同的依赖关系,我应该注意每个包都使用相同的webpack版本。
基本上我要了解的是 monorepo 中的包应该如何构建?如果发布了任何包,是否始终可以单独build 该包。
【问题讨论】:
-
我们的 mono repo 的工作方式是每个包都有自己的节点模块,但您只能安装您感兴趣并且正在开发的那些。然后我们在根目录下有一个命令 Build,它基本上在所有包中执行构建
-
因此您将构建的责任放在“根”包上并从那里运行构建命令。这似乎是正确的方法。我正在考虑对其余命令也这样做(例如测试、清理等)。
-
你应该看看 lerna。它具有帮助您管理 monorepo 并自动执行某些任务的工具,例如链接 monorepo 中的包。我将 lerna 用于我的 monorepo,效果很好。
-
我认为将这个问题的标题更改为“什么是 javascript monorepo 的正确方法”是有意义的。这将有助于其他人在通过 Stackoverflow/Google 搜索时找到此问题/答案。
标签: javascript npm webpack lerna monorepo