问题标签 [lerna]

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 投票
2 回答
561 浏览

javascript - 是否可以通过创建新的(未发布的)“子”包来分解(发布的)包的依赖列表?

我维护了一个发布在 npm 注册表上的 JavaScript 库,它有很多依赖项。很难跟踪代码的哪一部分取决于外部包。

不幸的是lerna, 、yarn的工作区、npm linknpm的本地路径依赖声明都没有帮助。(我在示例之后解释了原因。)

我希望能够通过将一些依赖项提取到新的“子包”中来分解dependencies声明的列表。package.json

因此,而不是具有以下依赖项列表

我想将一些依赖项提取到一个新的本地包example-lib-subpackage中。对于本地,我的意思是example-lib-subpackage它只能被example-lib.

example-lib-subpackage的依赖列表是;

example-lib的依赖列表将大大减少到;

注意example-lib现在如何依赖于本地包example-lib-subpackage

有没有人做到这一点?这将是超级方便。

请注意,lernaandyarn的工作区功能仅在您可以将本地包发布到 npm 注册表时才有帮助。但在我的情况下,将本地包发布example-lib-subpackage到 npm 注册表没有意义。

此外,npm linkandnpm的本地路径依赖功能仅适用于未发布但example-lib需要位于 npm 注册表上的包。

将包发布到公共注册表时,不应使用本地路径 [...]。

引用自https://docs.npmjs.com/files/package.json#local-paths

0 投票
2 回答
3941 浏览

continuous-integration - 使用 lerna 和部署机器人发布 Monorepo

这是场景:

我们想要一个用于多个组件的 monorepo,并希望将 lerna 与 yarn 工作区一起使用。

为了确保语义版本控制不会出现问题,最好也对版本号进行代码审查。因此,package.json定义了一个version-bump仅用于增加包版本的脚本。

在测试运行且 CR 正常后,我们希望部署机器人为我们将包发布到我们的自定义注册表。为此,最好使用lerna publish --skip-git,这样 lerna 只会发布更改的包。

这里的问题是,它lerna publish不仅会发布包,还会再次要求它们的版本增量。很高兴知道在不增加版本的情况下发布的选项或解决方法。

我们当前的解决方法是使用lerna exec npm publish,但这会尝试再次发布已经发布的包。我们也不能使用lerna exec yarn publish,因为在这种情况下yarn要求版本增量。

设置如下所示:

lerna.json:

包.json

0 投票
0 回答
620 浏览

javascript - 如何让 npm 或 yarn 从 github 安装特定版本的特定子包?

我有一个repo,它是从 github 上的一个项目中派生出来的,其结构如下:

我在一个单独的分支 foo 中对 subpackage1 做了一些小的修改。现在我想在项目中使用它。所以我尝试了以下

然后我尝试不使用分支说明符。然后我尝试npm install代替yarn add. 然后我尝试只安装除了基本 url 之外的任何其他内容,但由于顶层没有版本号而失败package.json。我显然在这里遗漏了一些东西,但我不知道是什么。

0 投票
1 回答
433 浏览

npm - monorepo 的单一依赖管理

正在使用lerna. 我有一个主包,我的应用程序 ( app),它是一个react应用程序和几个其他包,它们通常是react组件。

应用程序.js

在这里,我正在导入CollectionBrowser导出react组件:

CollectionBrowser.js

现在有两件事困扰着我:

  1. 我要导入和捆绑react两次,一次在我的主应用程序中,另一次独立于我的 CollectionBrowser 中。有没有一种只捆绑react一次的好方法?
  2. 我有 2 个(或任意数量)构建脚本,一个用于我创建的每个包。难道没有一个很好的方法来拥有一个捆绑器和一个转译过程吗?
0 投票
0 回答
404 浏览

javascript - Webpack HMR:不监视 /node_modules 中外部包的更改

我有一个关于 React + Webpack 2 的项目。最近,需要将项目划分为模块。我决定将 Monorepo 与 Lerna 一起使用。但是我造成了很多问题。主要问题之一是我对链接包所做的更改不会导致自动组装。

我想我没有考虑到一些事情。告诉我可能是什么问题?

我的配置:

https://github.com/react-boilerplate/react-boilerplate/tree/master/internals/webpack

0 投票
1 回答
1736 浏览

webpack - Webpack 和 Yarn 工作区 / Lerna

我已将 lerna 设置切换为使用 Yarn Workspace。现在我有一个包含所有包依赖项的根 node_modules。每个包中的 node_modules 只有一个 .bin 文件夹。

使用此设置,webpack 无法解析依赖项。我需要像这样更改我的配置文件:

关于此设置的两个问题:

  • 为什么我需要添加符号链接属性?我有很多错误没有。

  • 这是使用工作区在 webpack 中添加相对解析器的正常行为吗(我有一些包裹在 dotnet 解决方案中的包,我需要添加一个非常长的相对路径,例如 ../../../../.. /../node_modules) ?

0 投票
2 回答
194 浏览

reactjs - 将 react native 应用程序与 reactjs 应用程序分开

我将react native web与我的 react native 应用程序一起使用

我可以在同一个地方有相同的 react native 和 react native web 代码吗?

目前,我在 src\mobile 中的移动代码,您可以在此处看到: https ://github.com/amorenew/LifeMaster/tree/master/src

0 投票
2 回答
3616 浏览

npm - 将 args 传递给 lerna exec 命令

目标

我有yarn test,它实际上是由两个子命令组成的yarn test:root && yarn test:packages。两者都运行 jest(但包使用 lerna exec 间接执行)。我希望能够yarn test -t=Pattern从终端输入并将两个子命令都附加-t=Pattern到末尾。lerna exec -- "yarn test"似乎没有办法做到这一点。

背景

我有一个 monorepo,用于在每个 lerna 包上lerna exec运行。yarn test

鉴于:

我希望能够做类似的事情

yarn test --updateSnapshot并附--updateSnapshot加到yarn test通过 lerna exec 运行

使用常规 npm 脚本(请参阅 参考资料test:root)可以$@正常工作。lerna文档没有提到任何方法来做到这一点。

更新

我认为最简单的方法是编写一个包含 args 和命令的脚本。这将需要在所有 lerna 包中使用。

0 投票
1 回答
1713 浏览

npm - 使用 lerna 向 npm (yarn) 脚本发送自定义参数

尝试将参数传递给npm带有lerna.

我有一个节点脚本,我想在工作区的每个包中运行它。lerna文档建议以下内容:

所以现在,如果我在根目录yarn run my-script下运行,它将在工作区的每个包中运行脚本。

有时,我需要将执行范围限定为特定的包。所以从命令行运行它显然有效:lerna exec --scope somepackage -- node \$LERNA_ROOT_PATH/scripts/create-common-scripts.js.

我的问题:如何将 npm 脚本与lerna范围参数连接起来。这不起作用:yarn run my-script --scope somepackage,因为它将参数设置为命令的末尾:lerna exec -- node \\$LERNA_ROOT_PATH/scripts/my-script.js --scope somepackage

谢谢!

0 投票
0 回答
622 浏览

javascript - Lerna - 如何使用内部符号链接管理外部包

我根本不是 Lerna 的专家,如果这个问题看起来很愚蠢,我很抱歉。

我想要归档的是管理一组私有 NPM 包(在 git mono-repo 项目中使用 Lerna)和一些依赖于 Lerna 单存储库的外部 git 项目。

实际例子:

我有一个在 Lerna 下作为 NPM 私有包在前端和后端共享的 API 客户端,如果我要更改此包中的某些内容,我希望在不发布两个项目(前端和后端)的情况下实时进行所有更改包裹。

我想用 Lerna 管理 API 客户端和所有 Lerna 功能的命令,但我不关心用 Lerna 管理前端和后端(因为不是包,是未在 NPM 上发布的应用程序)

Lerna 应该管理这种结构,还是我必须把所有东西都放在一个单一的仓库中?

因此,我会避免将整个 React 前端项目和数十个 Lambda 函数存储在一个存储库中。一方面,它会简化依赖问题,另一方面,会使项目管理流程在版本/功能和跨团队任务方面过于复杂。

谁能帮助我提供有关如何执行此操作的任何有用链接?(如果可能的话:))

太感谢了!