问题标签 [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.
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 复杂化)。
有没有更好的方法在我的所有包中共享这些命令?
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 有这样的功能。
谢谢
reactjs - 创建反应应用程序不能使用具有流类型的本地模块
我创建了一个 monorepo,它将包含 2 个使用create-react-app 创建的应用程序和 1 个具有共享组件的模块。现在我有 1 个create-react-app和共享组件模块。
对于我的项目,我想使用 Flow。因此,我在项目的根目录中使用了flow init 。运行yarn start可以在create-react-app文件中使用流类型。但我正在从共享组件中导入一个文件,其内容如下:
对于此文件,我收到以下错误:
删除类型注释可以让应用程序编译。为了使共享组件模块中的流类型正常工作,我必须进行哪些更改?
提前致谢!
reactjs - Create-react-app monorepo 使用本地模块的源映射
我创建了一个带有 2 个模块的 monorepo。一个是create-react-app,另一个是包含共享组件的包。
导入共享组件后,应用程序启动没有任何问题。如果我在浏览器中调试它,我会从我的 IDE 中看到来自create-react-app的所有组件的正常代码,但其他模块的内容不同。
这是我共享组件中的一个文件:
在我的浏览器工具中,我看到:
有没有办法修改它,以便我可以在浏览器工具中看到“未编译”的代码?
javascript - 如何修复 Lerna Monorepo 中的 VSCode 导入路径建议?
VSCode 在自动建议导入方面做得很好,但是在(Lerna)monorepo 中,它只建议从一个包到另一个包的相对路径,例如:
我需要使用它们的包名来引用其他包:
我的jsconfig.json
哪个是我的 monorepo 的根源:
有没有办法在 VSCode 中获得正确的自动完成功能?
注意:有一个可用的插件,但它只适用于.ts
文件。
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
两个子模块中)
npm - 使用本地 lerna 包作为根文件夹上的脚本
我有几个scripts
在根目录中使用的包。
我使用npm link scripts/babel-preset
which 使我能够preset
在 main中使用babel.config.js
,我想知道这是否是正确的方法,或者我错过了这里的明显之处?
我知道,lerna bootstrap
但它适用于兄弟姐妹之间的子文件夹。我的问题是在 root 中使用包。
无论如何在根目录中使用脚本而不使用npm link
每个包?
谢谢你。
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.json
。tsc
从根目录运行一个简单的程序并查看所需的结果会很棒!
感谢您查看此问题 :) 如果您有任何问题或需要澄清,请告诉我。
lerna - 通过 lerna api 命令式地获取“lerna list”输出
我想lerna list --json
在节点脚本中获得 CLI 功能,以进行各种发布调整。我浏览了代码库,但找不到合适的 API 来完成正确的工作:
例子:
bazel - Bazel - 如何确定需要重建的目标?
如果我有一个使用 bazel 的 monorepo,与之前的提交相比,如何获得需要为当前提交重建的目标列表?
理想情况下,有一种方法可以从更改的源文件返回到需要它们的直接和传递目标。
如果我知道哪些目标需要重建,我就会知道我需要重新部署哪些组件。