问题标签 [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 投票
1 回答
766 浏览

node.js - 使用 lerna 为 react 和 node js web 应用程序实现 monorepo

我正在尝试构建一个 monorepo ,它由一个 react 和 node js 应用程序组成,所以前端文件夹是使用 react app 创建的,后端文件夹包含所有服务器代码。

我已经完成了以下步骤

全局安装 lerna

创建了一个新文件夹并初始化了存储库。

在新文件夹中运行 lerna init,它创建了 2 个文件 lerna.json、package.json 和 1 个文件夹作为包。

在packages文件夹中我运行create-react-app frontEnd,它创建了一个新的react应用程序

运行命令 mkdir backEnd,在 packages 文件夹中创建 backEnd 文件夹

现在我的包文件夹包含两个文件夹 frontEnd 和 backEnd。

前端由 create-react-app 附带的 package.json 组成

问题

我需要从前端文件夹中删除 package.json

我如何在根文件夹中配置 lerna.json 和 package.json。

我怎样才能运行应用程序?

我已经搜索过,但我没有得到使用 create-react-app 使用 lerna 制作 react-nodejs 应用程序的解决方案

0 投票
0 回答
420 浏览

node.js - Lerna / Webpack:如何在子模块中检索存储库环境变量

我正在开发具有以下代码架构的 VueJS 应用程序(+ webpack + lerna):

  • 包.json
  • lerna.json
  • 包/
  • 模块/
  • 插件/

所有子模块(模块 + 包)都调用 REST API。

到目前为止,REST API URL 是在构建步骤期间使用 webpack DefinePlugin 定义的,或者直接在代码中,或者使用 cross-env 命令:

我希望在服务器启动时(而不是在构建期间)使用存储库环境变量(存储库根目录下的 process.env)定义 REST API URL。

我尝试在根目录下放置一个 .env 文件,但它无法访问模块内的数据。该模块似乎只读取它自己的 .env 文件。

你有什么解决方案,或者你能指出我正确的方向,以另一种方式获得相同的结果吗?

0 投票
2 回答
3399 浏览

performance - lerna 构建非常缓慢,总是(+30 分钟)

我刚刚加入了一个基于 Lerna 代码架构的新 VueJS / Webpack:

大约应用程序的每个页面都被设置为一个单独的模块,我觉得这很奇怪,虽然我不是专家,但我不确定这是设置 Lerna 架构的正确方法。

尽管如此,package.json 定义了以下内容:

和应用程序,虽然中等大小,我会说:

带有 node_modules 的应用程序的大小

构建总是很慢(+30 分钟)。在每个构建中。构建是这样执行的:

有没有什么好的做法可以更快地构建?关于我的项目中可能设置错误的任何想法?或者这只是正常的......

0 投票
0 回答
565 浏览

node.js - Lerna 提升不适用于非同级文件夹或位于 packages 文件夹内的文件夹。

我正在使用 lerna,并且正在使用它npm installbuild我们的角度代码。但是我的项目不能进入包文件夹。

我想让 lerna npm 安装一堆不同的项目,提升公共依赖项,然后在所有项目上运行构建。这是我的目录结构:

我的 lerna.json 引用了这些包。

这不起作用,因为该node_modules文件夹不在父文件夹中。它在“阿姨”文件夹中。即使它们不在父文件夹中,如何添加提升的依赖项。lerna/node_modules

0 投票
0 回答
542 浏览

node.js - 在 monorepo 上的 package.json 上配置存储库字段

情况

lerna我有一个包含 40-50 个项目的 monorepo 。每个都有package.json这样的。

文件夹结构是这样的,

如果我将它推送到 github,它将只有一个 github url,但是我看到babel有 142 个包,其中每个包repositorypackage.json.

我希望他们不会为 142 个包手动设置此值。我的 40 个小包裹也一样。

我知道在我写这个问题时,我可以在 3-4 分钟内手动设置它们。但是,当我尝试对 150 包 monorepo 或将来做同样的事情时,这将变得不堪重负。

问题

如何在不package.json手动打开 40 个包的每个文件的情况下设置/更新存储库字段?

我试过的

尽可能手动设置每个,但考虑到我是一名程序员,事情很快就变得无聊和重复。然后我用谷歌搜索了大约一个小时的解决方案。最后我写了以下脚本,

有没有简单的方法来处理这个问题?使用任何类型的,shell或命令?gityarnnpm

0 投票
2 回答
2503 浏览

unix - 一次中断所有 lerna --parallel 任务

我有一个 lernalerna dev脚本--parallel(这些服务器在不同端口上以开发模式为各自的应用程序提供热重载。基本上,这允许顺利开发,因为我们只需输入一个命令即可开始处理多个包。

我注意到的问题是,当我中断这个 lerna 任务时,服务器不会关闭。当我运行我的lerna dev命令时,它会打印出说明服务器已经在它们使用的端口上运行的消息。这意味着,当我关闭lerna dev命令(使用CTRL+ C)时,它不会杀死所有正在运行的进程(有些被杀死,有些没有)。

有趣的是,那些不关闭的是create-react-app projects.

所以这是我的问题:如何确保通过lerna run带有选项的命令启动的进程--parallel都与主进程一起被杀死?

PS:这发生在 Unix 系统上,我们不使用 Windows。

0 投票
1 回答
925 浏览

reactjs - 与 Lerna 一起开发

我在一个 10 人的团队中工作,我们刚刚开始使用 Lerna。但是当我们都在开发新功能并修复现有软件包时,我们发现了一些问题。

有时,有人不会将更改推送到 master 分支,他们会执行 lerna publish,以便他们可以安装该包的最新版本并在他们的项目中使用它。

这给我们所有人带来了麻烦,因为我们没有与包版本同步,并且 lerna 会发现人没有更新的包中的更改并强制他们发布未更改的(由他们)包。你有一些提示如何在尚未发布到 npm 的地方使用 Lerna 包“进行中”吗?现在我们使用命令从本地文件安装它:

 npm install - 保存文件:path_to_npm_package

为什么我觉得这很糟糕?因为这样它不知道 lerna 的符号链接,我应该在我的项目中安装 lerna 包所依赖的所有依赖项。

PS。使用 lerna 包的项目不是其他 lerna 包。

0 投票
1 回答
1432 浏览

lerna - 带有 Lerna 的纱线工作区仍在将包添加到子文件夹

我对 Yarn Workspaces 感到困惑。我遵循了本教程:https://medium.com/trabe/monorepo-setup-with-lerna-and-yarn-workspaces-5d747d7c0e91但在其中一个子项目中,我仍然将包添加到 node_modules 中,这些包是从根节点模块。完整的测试仓库在这里:https ://github.com/donker/Dnn.React.Test

根包.json:

子项目包.json:

结果:packages/Tooltip/node_modules/lodash 创建。

预期:工具提示使用根文件夹中的 node_modules/lodash。

0 投票
1 回答
37 浏览

webpack - 让 babel-loader 通过 webpack

我有一个 lerna monorepo,有两个包:marketing-site 和 button。我的营销站点包使用 webpack 配置,具有以下规则:

如果我在marketing-site/src/index.js,并且我import styles from '../button/src/styles.scss',它会起作用。scss 由sass-loader和 处理css-loader

但是,如果 Iimport '../button/src'本身具有import './style.scss',我会得到一个SyntaxError: Unexpected token.

同样,如果我将整个按钮文件夹移动到marketing-site中,一切正常。

有什么方法可以强制 webpack 使用它的加载器来处理根目录之外的另一个目录中的 scss 文件?

(不幸的是,我需要指定要在这个 webpack 配置中使用的加载器,因为在同一个 monorepo 中有另一个项目使用不同的加载器集。我们希望button在两者之间共享这个组件。因此,在button/.babelrc是不够的。)

0 投票
0 回答
166 浏览

javascript - 在 monorepo 中使用 Webpack 4 的 mainFields 分辨率不一致

在使用 Lerna 和 Yarn 工作区连接的 monorepo 中,其中一个包是 Next.js 应用程序,它依赖于 monorepo 内部的几个包。

monorepo 中的所有消耗品包都是用现代 javascript 编写的,并且在它们的 s中都有一个main字段和一个字段。按照约定,该字段指向使用 CJS 的已转译代码,而该字段指向除了将 ES 模块转换为 CJS 之外的已转译代码。modulepackage.jsonmainmain

如前所述,使用这些包的包是一个 Next.js 应用程序,它是使用 Webpack 4 构建的。奇怪的是,其中一个消耗的包被解析到main字段,而其余所有包都正确解析到module字段。

我什至尝试手动设置resolve.mainField[ 'module', 'main', ],但没有效果。

我在文档中找不到任何可以解释这种行为的东西,任何提示都将不胜感激