我有一个正在开发的项目的lerna回购.它有几个相互依赖的包.为了简化开发,没有发布任何软件包,它们依赖于彼此的最新版本.
目录树
foo/
packages/
core/
package.json
errors/
package.json
Run Code Online (Sandbox Code Playgroud)
富/包/核心/的package.json
{
...
dependencies: {
"@foo/errors": "*"
}
}
Run Code Online (Sandbox Code Playgroud)
我有另一个项目,bar
我正在用来测试lerna项目.目前我正在使用本地file:
依赖关系链接到它的依赖项:
酒吧/的package.json
{
...
dependencies: {
"@foo/core": "../foo/packages/core"
}
}
Run Code Online (Sandbox Code Playgroud)
这种方法给了我一个麻烦的世界.
yarn install
在bar
.Yarn遵循file:
依赖关系@foo/core
,看到它依赖于@foo/errors
并且不了解lerna的符号链接.这导致它失败,告诉我它找不到@foo/errors
.这使得为这个项目编写实际代码是次要的依赖管理.
我怎样才能做到这一点(我感觉相当简单?)项目结构工作?此时打开到lerna/yarn/npm/pnpm/shell脚本/ MS DOS.
这个用例是在 Lerna monorepos 中的分支构建和部署。
问题是 Lerna monorepos 要么提升 NPM 中的依赖项,要么使用 yarn 工作区达到相同的效果来收集工作区/monorepo 的 node_modules 文件夹中的所有依赖项。这意味着由于 docker 构建上下文的工作方式,在子文件夹中构建 Dockerfile 时将无法访问它们。
我想这里需要的是一种“较低”(与提升相反)的函数,用于在运行 docker build 之前将包依赖项拉到 Docker/package.json 项目的 node_modules 中。
问题是,有没有人有更好的主意,或者知道已经存在的方法来做到这一点?
我参与了一个包含两个独立存储库的项目,我们很快将它们组合成一个单独的存储库.Lerna的import
指挥在这方面会非常有帮助,所以我们将保留项目的历史.
但是,目前在原始存储库中存在一些正在进行的功能分支,当我们转移到monorepo时可能不会准备好.这是我的理解,lerna import
只会从源代码库中提取当前已检出的分支 - 这是正确的吗?
所以我想知道是否有办法再次进行导入,但只提取自上次导入后提交的提交?
这样,在功能分支上工作的团队develop
一旦准备好就可以合并到分支机构,我们可以将其转移到monorepo中.
或者,是否存在处理此方案的策略?
或者我将不得不等到一切都合并到develop
之前lerna import
?
谢谢!
NPM 7.0.0 工作区是否不再需要 Lerna?
我对这个新的 npm 功能并没有真正的经验。
Npm/rfcs写道:
首先也是最重要的是,可以选择将问题集留给用户空间来解决,已经有非常流行的项目 Lerna 提供了其中的一些功能。
还可以选择仅支持此提案的安装(或 Lerna 命名的引导程序)方面,采用功能不太丰富的方法,但仍然可以实现改善管理多个子包的用户体验的基本目标,但是从在这个 RFC 的研究阶段收集的所有反馈来看,这个替代方案对于所涉及的维护者社区来说不太理想。
很高兴每一个答案和解释:)
我正在尝试使用npm安装lerna,成功添加了包但是当我运行lerna的任何命令时它出来了.
bash:lerna:找不到命令
节点版本:v8.10.0
Npm版本:3.10.9.
这是我正在尝试的:
$ npm install --global lerna
C:\Users\<user-name>\AppData\Roaming\npm\lerna -> C:\Users\<user-name>\AppData\Roaming\npm\node_modules\lerna\bin\lerna.js
C:\Users\<user-name>\AppData\Roaming\npm
`--lerna@2.11.0
VaibhavPC@Vaibhav MINGW64 ~/Projects/lerna init
bash: lerna: command not found
Run Code Online (Sandbox Code Playgroud) 当 monorepo 中的包具有对等依赖项时,如何在开发过程中使这些依赖项对它们可用?
例如,一个包在/packages/namespace/alpha/
可能有一个devDependency
的styled-components
在它的package.json
。
可能的选项:
声明与开发依赖项相同的依赖项(不必要的重复和维护成本)。
在 monorepo 的路由中安装包package.json
(使用yarn link
.
我正在将 Lerna 与纱线工作区一起使用。
我正在为客户将一个大型的 monorepo 转换为 TypeScript,但是,我自己对 TS 还很陌生,并且遇到了一个错误,我找不到明显的修复方法。
TS6059: File '[path to repo root]/packages/config/globals.ts' is not under 'rootDir' '[path to repo root]/packages/components/src'. 'rootDir' is expected to contain all source files.
该globals.ts
文件不应该存在于components
包中,它属于config
包,所以我不太明白这个错误。
我在存储库的根目录中有一个主 tsconfig 文件(https://github.com/serge-web/serge/blob/feature/333-game-admin-channel/tsconfig.json),然后每个包都有自己的tsconfig 文件扩展了该文件。该components
包的位置在这里: https: //github.com/serge-web/serge/blob/feature/333-game-admin-channel/packages/components/tsconfig.json
我假设我错误地扩展了包中的 tsconfig 文件,或者我references
错误地使用了它,但我找不到正确的方法来执行此操作。
如果您需要查看结构,这里是存储库的链接:https://github.com/serge-web/serge/tree/feature/333-game-admin-channel
我正在尝试用Lerna建立我的monorepo.计划是通过拉出应该是他们自己的包的代码块来重构现有项目.我跑了lerna init
,我目前的设置如下:
project/
packages/
new-refactored-package/
package.json
prior-existing-project/
package.json
{ "dependencies" : { "new-refactored-package" : "latest" } }
package.json
{
"devDependencies": {
"lerna": "^2.0.0-rc.5"
}
}
lerna.json
{
"lerna": "2.0.0-rc.5",
"packages": [
"packages/*"
],
"version": "0.0.0"
}
Run Code Online (Sandbox Code Playgroud)
我的理解是,lerna bootstrap
在这一点上应该定位package1
在项目并将其符号链接到prior-existing-project
的/node_modules/new-refactored-package/
.来自lerna的自述文件:
在当前的Lerna仓库中引导包.安装所有依赖项并链接任何交叉依赖项.
运行时,此命令将:
- npm安装每个包的所有外部依赖项.
- 将所有相互依赖的Lerna软件包汇集在一起.
- npm预先发布所有自举包.
但是,当我运行它时,lerna会尝试npm install new-refactored-package
:
错误的ERR!404注册表在https://registry.npmjs.org/new-refactored-package上为GET返回404
我误会了吗?我首先必须发布依赖的包npm
吗?
我有一个 lerna + 纱线工作区 monorepo,具有独立的版本控制。我在导入同级包时遇到问题。
我有两个包,其中一个应该依赖于另一个,如下所示:
(root)
|--packages
|--money
|--money-standard-units
|--{deps. on money}
Run Code Online (Sandbox Code Playgroud)
在 的内部money-standard-deps
,我尝试导入 的导出成员,money
但无法这样做;我收到以下消息:
TS2307:找不到模块“money”或其相应的类型声明。
我知道这个问题可以通过添加money
到tsconfigpaths
的数组中来解决,但我想依赖于构建的包,因为它们将单独发布。我希望它能够有效地工作,就好像它是两个单独的存储库一样。money-standard-libs
我创建了一个演示存储库。
我正在为我的项目使用纱线.我的项目有依赖性,恰好是由lerna维护的更大的monorepo的子包.子包已更新但尚未发布,我需要未发布的代码.有没有办法通过git url安装lerna的子包?
谢谢.