问题标签 [monorepo]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2498 浏览

javascript - 如何在 Lerna 包中共享构建脚本

我有一个 lerna 存储库,其中包含以通常结构组织的多个包:

我需要转译所有包,我目前在每个包中都有以下脚本package.json

我目前使用以下方式运行构建:

但是我不想为每个包复制这些脚本。我想在一个地方定义脚本,但从所有包中使用它们。我目前在我的根包中有 linting 脚本和测试脚本,这很有意义,因为它们有效地遍历整个 monorepo 以查找测试或要 lint 的文件。将构建脚本移到那里似乎没有意义,因为它们仅限于单个包,而且我喜欢这样一个事实,即当我使用lerna run.

一个不令人满意的解决方案是在 monorepo 的根目录中创建一些 shell 脚本并从包的package.json文件中调用它们:

root/packages/example/package.json

然后在root/scripts/build.sh

虽然这可行,但感觉不对:它仍然涉及包之间的重复,并且需要在 shell 脚本上设置权限(这使 CI 复杂化)。

有没有更好的方法在我的所有包中共享这些命令?

0 投票
1 回答
660 浏览

javascript - 为开发环境配置 Lerna:使用共享包

我有使用Lerna. 它具有以下结构:

create-react-app-example就像create-react-app产生的一样。即它使用 webpack 来编译 ES6/ES7 代码,对文件更改等进行热模块替换;

utils包只有 1 个具有一些实用功能的文件。并且这个功能是在create-react-app-example包里面使用的;它不使用 Webpack、Babel 或任何其他工具;

所以,一切都很简单。

但是我很难尝试配置舒适的开发环境。

所以我想要的东西很少:

  • 能够在utils包内使用 es6/es7 代码(这个包的代码应该以某种方式转译);
  • 包发生变化时主模块自动热更新utils

我唯一想到的是webpack.config.js调整create-react-app-example

  • 更改 babel loader 的设置,因此它不会排除node_modules/utils文件夹并将其转译;
  • 并更改参数,webpack watch因此它将检测两个包中的更改

但我不喜欢上面的解决方案,它对我来说看起来很脏。

可能有一些更优雅的解决方案?

或者我也应该将 webpack.config 添加到utils包中并以某种方式将其用作库?如果我没记错的话,Webpack 有这样的功能。

谢谢

0 投票
1 回答
192 浏览

reactjs - 创建反应应用程序不能使用具有流类型的本地模块

我创建了一个 monorepo,它将包含 2 个使用create-react-app 创建的应用程序和 1 个具有共享组件的模块。现在我有 1 个create-react-app和共享组件模块。

对于我的项目,我想使用 Flow。因此,我在项目的根目录中使用了flow init 。运行yarn start可以在create-react-app文件中使用流类型。但我正在从共享组件中导入一个文件,其内容如下:

对于此文件,我收到以下错误:

删除类型注释可以让应用程序编译。为了使共享组件模块中的流类型正常工作,我必须进行哪些更改?

提前致谢!

0 投票
0 回答
231 浏览

reactjs - Create-react-app monorepo 使用本地模块的源映射

我创建了一个带有 2 个模块的 monorepo。一个是create-react-app,另一个是包含共享组件的包。

导入共享组件后,应用程序启动没有任何问题。如果我在浏览器中调试它,我会从我的 IDE 中看到来自create-react-app的所有组件的正常代码,但其他模块的内容不同。

这是我共享组件中的一个文件:

在我的浏览器工具中,我看到:

有没有办法修改它,以便我可以在浏览器工具中看到“未编译”的代码?

0 投票
1 回答
2967 浏览

javascript - 如何修复 Lerna Monorepo 中的 VSCode 导入路径建议?

VSCode 在自动建议导入方面做得很好,但是在(Lerna)monorepo 中,它只建议从一个包到另一个包的相对路径,例如:

我需要使用它们的包名来引用其他包:

我的jsconfig.json哪个是我的 monorepo 的根源:

有没有办法在 VSCode 中获得正确的自动完成功能?

注意:有一个可用的插件,但它只适用于.ts文件。

0 投票
2 回答
13948 浏览

node.js - 勒纳。将依赖项安装到根项目

我有这样的标准Lerna存储库:

如果我在两个包中都需要相同的依赖项(例如lodash),那么教程中的人建议将它安装到两个子模块中,然后使用带有lerna bootstrap --hoist标志的引导项目。

由于--hoist标志lodash依赖项将仅加载到根级别node_modules,但两个子模块都将其作为依赖项包含在其适当的package.json

但是 Node 的包解析算法会在文件树上搜索文件node_modules夹。

所以我的问题是为什么我不能只将公共依赖项安装到根级项目?然后lodash将位于根目录下node_modules。并且子模块(包)会找到它,因为 Node 会向上搜索,node_module直到到达文件系统的根目录。

至少它会帮助我避免使用 uncommon lerna bootstrap --hoist,并且lodash依赖项只会在顶层出现一次package.json(而不是两次:在package.json两个子模块中)

0 投票
1 回答
556 浏览

npm - 使用本地 lerna 包作为根文件夹上的脚本

我有几个scripts在根目录中使用的包。

我使用npm link scripts/babel-presetwhich 使我能够preset在 main中使用babel.config.js,我想知道这是否是正确的方法,或者我错过了这里的明显之处?

我知道,lerna bootstrap但它适用于兄弟姐妹之间的子文件夹。我的问题是在 root 中使用包。

无论如何在根目录中使用脚本而不使用npm link每个包?

谢谢你。

0 投票
0 回答
45 浏览

typescript - 所有 monorepo 包的单一 TypeScript 配置 + 编译命令

假设我有一个具有以下结构的 monorepo:

├── package.json ├── tsconfig.json └── packages │── first │ ├── package.json │ └── src │ └── index.ts │── second │ ├── package.json │ └── src │ └── index.ts └── third ├── package.json └── src └── index.ts

我想编译每个包的 TypeScript,使树现在变成......

├── package.json ├── tsconfig.json └── packages │── first │ ├── package.json │ ├── lib │ │ └── index.js │ └── src │ └── index.ts │── second │ ├── package.json │ ├── lib │ │ └── index.js │ └── src │ └── index.ts └── third ├── package.json ├── lib │ └── index.js └── src └── index.ts

这可以在不向tsconfig.json每个包添加新的(将扩展根配置)的情况下实现吗?我希望我错过了 TS 文档中的某些内容,并且这可以通过更改 root-level 来实现tsconfig.jsontsc从根目录运行一个简单的程序并查看所需的结果会很棒!

感谢您查看此问题 :) 如果您有任何问题或需要澄清,请告诉我。

0 投票
1 回答
252 浏览

lerna - 通过 lerna api 命令式地获取“lerna list”输出

我想lerna list --json在节点脚本中获得 CLI 功能,以进行各种发布调整。我浏览了代码库,但找不到合适的 API 来完成正确的工作:

例子:

0 投票
1 回答
325 浏览

bazel - Bazel - 如何确定需要重建的目标?

如果我有一个使用 bazel 的 monorepo,与之前的提交相比,如何获得需要为当前提交重建的目标列表?

理想情况下,有一种方法可以从更改的源文件返回到需要它们的直接和传递目标。

如果我知道哪些目标需要重建,我就会知道我需要重新部署哪些组件。