问题标签 [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.
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 应用程序的解决方案
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 文件。
你有什么解决方案,或者你能指出我正确的方向,以另一种方式获得相同的结果吗?
performance - lerna 构建非常缓慢,总是(+30 分钟)
我刚刚加入了一个基于 Lerna 代码架构的新 VueJS / Webpack:
大约应用程序的每个页面都被设置为一个单独的模块,我觉得这很奇怪,虽然我不是专家,但我不确定这是设置 Lerna 架构的正确方法。
尽管如此,package.json 定义了以下内容:
和应用程序,虽然中等大小,我会说:
构建总是很慢(+30 分钟)。在每个构建中。构建是这样执行的:
有没有什么好的做法可以更快地构建?关于我的项目中可能设置错误的任何想法?或者这只是正常的......
node.js - Lerna 提升不适用于非同级文件夹或位于 packages 文件夹内的文件夹。
我正在使用 lerna,并且正在使用它npm install
和build
我们的角度代码。但是我的项目不能进入包文件夹。
我想让 lerna npm 安装一堆不同的项目,提升公共依赖项,然后在所有项目上运行构建。这是我的目录结构:
我的 lerna.json 引用了这些包。
这不起作用,因为该node_modules
文件夹不在父文件夹中。它在“阿姨”文件夹中。即使它们不在父文件夹中,如何添加提升的依赖项。lerna/node_modules
node.js - 在 monorepo 上的 package.json 上配置存储库字段
情况
lerna
我有一个包含 40-50 个项目的 monorepo 。每个都有package.json
这样的。
文件夹结构是这样的,
如果我将它推送到 github,它将只有一个 github url,但是我看到babel
有 142 个包,其中每个包repository
在package.json
.
我希望他们不会为 142 个包手动设置此值。我的 40 个小包裹也一样。
我知道在我写这个问题时,我可以在 3-4 分钟内手动设置它们。但是,当我尝试对 150 包 monorepo 或将来做同样的事情时,这将变得不堪重负。
问题
如何在不package.json
手动打开 40 个包的每个文件的情况下设置/更新存储库字段?
我试过的
尽可能手动设置每个,但考虑到我是一名程序员,事情很快就变得无聊和重复。然后我用谷歌搜索了大约一个小时的解决方案。最后我写了以下脚本,
有没有简单的方法来处理这个问题?使用任何类型的,shell
或命令?git
yarn
npm
unix - 一次中断所有 lerna --parallel 任务
我有一个 lernalerna dev
脚本--parallel
(这些服务器在不同端口上以开发模式为各自的应用程序提供热重载。基本上,这允许顺利开发,因为我们只需输入一个命令即可开始处理多个包。
我注意到的问题是,当我中断这个 lerna 任务时,服务器不会关闭。当我运行我的lerna dev
命令时,它会打印出说明服务器已经在它们使用的端口上运行的消息。这意味着,当我关闭lerna dev
命令(使用CTRL+ C)时,它不会杀死所有正在运行的进程(有些被杀死,有些没有)。
有趣的是,那些不关闭的是create-react-app projects
.
所以这是我的问题:如何确保通过lerna run
带有选项的命令启动的进程--parallel
都与主进程一起被杀死?
PS:这发生在 Unix 系统上,我们不使用 Windows。
reactjs - 与 Lerna 一起开发
我在一个 10 人的团队中工作,我们刚刚开始使用 Lerna。但是当我们都在开发新功能并修复现有软件包时,我们发现了一些问题。
有时,有人不会将更改推送到 master 分支,他们会执行 lerna publish,以便他们可以安装该包的最新版本并在他们的项目中使用它。
这给我们所有人带来了麻烦,因为我们没有与包版本同步,并且 lerna 会发现人没有更新的包中的更改并强制他们发布未更改的(由他们)包。你有一些提示如何在尚未发布到 npm 的地方使用 Lerna 包“进行中”吗?现在我们使用命令从本地文件安装它:
npm install - 保存文件:path_to_npm_package
为什么我觉得这很糟糕?因为这样它不知道 lerna 的符号链接,我应该在我的项目中安装 lerna 包所依赖的所有依赖项。
PS。使用 lerna 包的项目不是其他 lerna 包。
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。
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
是不够的。)
javascript - 在 monorepo 中使用 Webpack 4 的 mainFields 分辨率不一致
在使用 Lerna 和 Yarn 工作区连接的 monorepo 中,其中一个包是 Next.js 应用程序,它依赖于 monorepo 内部的几个包。
monorepo 中的所有消耗品包都是用现代 javascript 编写的,并且在它们的 s中都有一个main
字段和一个字段。按照约定,该字段指向使用 CJS 的已转译代码,而该字段指向除了将 ES 模块转换为 CJS 之外的已转译代码。module
package.json
main
main
如前所述,使用这些包的包是一个 Next.js 应用程序,它是使用 Webpack 4 构建的。奇怪的是,其中一个消耗的包被解析到main
字段,而其余所有包都正确解析到module
字段。
我什至尝试手动设置resolve.mainField
为[ 'module', 'main', ]
,但没有效果。
我在文档中找不到任何可以解释这种行为的东西,任何提示都将不胜感激