问题标签 [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.
javascript - 是否可以通过创建新的(未发布的)“子”包来分解(发布的)包的依赖列表?
我维护了一个发布在 npm 注册表上的 JavaScript 库,它有很多依赖项。很难跟踪代码的哪一部分取决于外部包。
不幸的是lerna
, 、yarn
的工作区、npm link
或npm
的本地路径依赖声明都没有帮助。(我在示例之后解释了原因。)
我希望能够通过将一些依赖项提取到新的“子包”中来分解dependencies
声明的列表。package.json
因此,而不是具有以下依赖项列表
我想将一些依赖项提取到一个新的本地包example-lib-subpackage
中。对于本地,我的意思是example-lib-subpackage
它只能被example-lib
.
example-lib-subpackage
的依赖列表是;
和example-lib
的依赖列表将大大减少到;
注意example-lib
现在如何依赖于本地包example-lib-subpackage
;
有没有人做到这一点?这将是超级方便。
请注意,lerna
andyarn
的工作区功能仅在您可以将本地包发布到 npm 注册表时才有帮助。但在我的情况下,将本地包发布example-lib-subpackage
到 npm 注册表没有意义。
此外,npm link
andnpm
的本地路径依赖功能仅适用于未发布但example-lib
需要位于 npm 注册表上的包。
将包发布到公共注册表时,不应使用本地路径 [...]。
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
javascript - 如何让 npm 或 yarn 从 github 安装特定版本的特定子包?
我有一个repo,它是从 github 上的一个项目中派生出来的,其结构如下:
我在一个单独的分支 foo 中对 subpackage1 做了一些小的修改。现在我想在项目中使用它。所以我尝试了以下
然后我尝试不使用分支说明符。然后我尝试npm install
代替yarn add
. 然后我尝试只安装除了基本 url 之外的任何其他内容,但由于顶层没有版本号而失败package.json
。我显然在这里遗漏了一些东西,但我不知道是什么。
npm - monorepo 的单一依赖管理
我正在使用lerna
. 我有一个主包,我的应用程序 ( app
),它是一个react
应用程序和几个其他包,它们通常是react
组件。
应用程序.js
在这里,我正在导入CollectionBrowser
导出react
组件:
CollectionBrowser.js
现在有两件事困扰着我:
- 我要导入和捆绑
react
两次,一次在我的主应用程序中,另一次独立于我的 CollectionBrowser 中。有没有一种只捆绑react
一次的好方法? - 我有 2 个(或任意数量)构建脚本,一个用于我创建的每个包。难道没有一个很好的方法来拥有一个捆绑器和一个转译过程吗?
javascript - Webpack HMR:不监视 /node_modules 中外部包的更改
我有一个关于 React + Webpack 2 的项目。最近,需要将项目划分为模块。我决定将 Monorepo 与 Lerna 一起使用。但是我造成了很多问题。主要问题之一是我对链接包所做的更改不会导致自动组装。
我想我没有考虑到一些事情。告诉我可能是什么问题?
我的配置:
https://github.com/react-boilerplate/react-boilerplate/tree/master/internals/webpack
webpack - Webpack 和 Yarn 工作区 / Lerna
我已将 lerna 设置切换为使用 Yarn Workspace。现在我有一个包含所有包依赖项的根 node_modules。每个包中的 node_modules 只有一个 .bin 文件夹。
使用此设置,webpack 无法解析依赖项。我需要像这样更改我的配置文件:
关于此设置的两个问题:
为什么我需要添加符号链接属性?我有很多错误没有。
这是使用工作区在 webpack 中添加相对解析器的正常行为吗(我有一些包裹在 dotnet 解决方案中的包,我需要添加一个非常长的相对路径,例如 ../../../../.. /../node_modules) ?
reactjs - 将 react native 应用程序与 reactjs 应用程序分开
我将react native web与我的 react native 应用程序一起使用
我可以在同一个地方有相同的 react native 和 react native web 代码吗?
目前,我在 src\mobile 中的移动代码,您可以在此处看到: https ://github.com/amorenew/LifeMaster/tree/master/src
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 包中使用。
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
。
谢谢!
javascript - Lerna - 如何使用内部符号链接管理外部包
我根本不是 Lerna 的专家,如果这个问题看起来很愚蠢,我很抱歉。
我想要归档的是管理一组私有 NPM 包(在 git mono-repo 项目中使用 Lerna)和一些依赖于 Lerna 单存储库的外部 git 项目。
实际例子:
我有一个在 Lerna 下作为 NPM 私有包在前端和后端共享的 API 客户端,如果我要更改此包中的某些内容,我希望在不发布两个项目(前端和后端)的情况下实时进行所有更改包裹。
我想用 Lerna 管理 API 客户端和所有 Lerna 功能的命令,但我不关心用 Lerna 管理前端和后端(因为不是包,是未在 NPM 上发布的应用程序)
Lerna 应该管理这种结构,还是我必须把所有东西都放在一个单一的仓库中?
因此,我会避免将整个 React 前端项目和数十个 Lambda 函数存储在一个存储库中。一方面,它会简化依赖问题,另一方面,会使项目管理流程在版本/功能和跨团队任务方面过于复杂。
谁能帮助我提供有关如何执行此操作的任何有用链接?(如果可能的话:))
太感谢了!