我们目前正在与我们的团队一起在我们的网站上查看CI/CD.我们最近也适应了monorepo结构,因为这使我们的依赖和概述更容易.目前测试等已准备好用于CI,但我现在正在进行部署.我想创建所需包的docker镜像.
我考虑的事情:
1)将完整的monorepo拉入docker项目,但在我们的项目中运行yarn安装导致总项目大小约为700MB,这主要是由于我们的本机应用程序甚至不应该有docker镜像.此外,每次我们必须部署新版本时,这都会导致图像拉长时间过长
2)以某种方式捆绑我的项目.我们的前端我们有工作设置,所以应该没问题.但是我只是尝试将webpack添加到我们的快速api中,并因此问题在我的捆绑包中出现错误:https://github.com/mapbox/node-pre-gyp/issues/308
3)我尝试仅在所需项目中运行yarn安装,但这仍将为我的所有项目安装我的node_modules.
4)运行npm包:pkg.这导致单个文件准备好在具有特定节点版本的特定系统上运行.这可行,但我不确定这将如何处理错误和崩溃.
5)另一种解决方案是将项目复制出工作区并在那里运行纱线安装.这个问题是使用纱线工作区(隐式链接的依赖关系)就好了.我必须明确地添加我的其他工作区依赖项.一种可能性是从某个提交哈希引用它们,我现在要测试它.(编辑:您似乎无法将子目录引用为纱线包)
6)???
我想知道我是否缺少一个选项,只为某个项目只有所需的node_modules,所以我可以保持我的docker图像小.
我有不同应用程序的 git monorepo。目前,我在包含应用程序所有管道的根文件夹中有一个 Jenkinsfile。当提交仅更改一个应用程序时,为所有应用程序执行完整管道非常耗时。
我们使用类似于 GitFlow 的方法进行分支,因此 Jenkins 中的 Multibranch Pipeline 作业非常适合我们的项目。
我正在寻找一种在 Jenkins 中拥有多个工作的方法,只有在更改相应应用程序的代码时才会触发每个工作。
对我来说完美的解决方案是这样的:
我在 Jenkins 有几个 Multibranch Pipeline 工作。每个都只查找给定目录和子目录的更改。每个人都使用自己的 Jenkinsfile。作业每 X 分钟拉一次 git,如果现有分支中的适当目录发生更改 - 启动构建;如果有更改适当目录的新分支 - 启动构建。
是什么阻止我执行此操作
我缺少一种方法来定义在 Multibranch 管道执行扫描期间必须忽略哪些文件夹的提交。Multibranch 管道的“附加行为”没有“轮询忽略对某些路径的提交”选项,而管道或自由式作业有。但我想使用 Multibranch 管道。
此处描述的解决方案对我不起作用,因为如果将有仅对“project1”进行更改的新分支,那么无论何时触发“project2”的多分支管道,它都会发现这个新分支并构建它。意味着对于每个新分支,无论是否对适当的代码进行了更改,我的每个多分支管道都将至少执行一次。
感谢任何帮助或建议我如何实现几个多分支管道监视同一个 git 存储库但仅在适当的代码片段更改时触发
当 monorepo 中的包具有对等依赖项时,如何在开发过程中使这些依赖项对它们可用?
例如,一个包在/packages/namespace/alpha/可能有一个devDependency的styled-components在它的package.json。
可能的选项:
声明与开发依赖项相同的依赖项(不必要的重复和维护成本)。
在 monorepo 的路由中安装包package.json(使用yarn link.
我正在将 Lerna 与纱线工作区一起使用。
我有一个带有 TurbeRepo monorepo 的 PNPM,使用了这个模板。在这个 monorepo 中,我有一个使用ui-shared包(本地共享代码,实际上不是 npm 包)的 NextJS 应用程序。
它ui-shared是按照类似的方式制作的,但我的包裹当然要大得多。index.ts使用导出所有组件和共享实用程序的a 。
构建时ui-shared它成功构建,但是当我构建 Nextjs 应用程序时,ui-shared构建失败,因为它无法解析tsconfig. 因此,经过几天的侦探工作,我成功地找出了我认为的问题所在。当构建下一个应用程序时,它也会构建 ,ui-shared但会失败,因为现在的路径基于 nextjs 而不是库本身。我不确定这是原因,但我相信是这样,而且我不知道如何解决这个问题
(我将指的是共享包或包ui-shared)
构建共享包成功
\nESM \xe2\x9a\xa1\xef\xb8\x8f Build success in 112ms\nESM dist/index.mjs 220.69 KB\nDTS Build start\nDTS \xe2\x9a\xa1\xef\xb8\x8f Build success in 4792ms\nRun Code Online (Sandbox Code Playgroud)\npackage.json 的部分内容
\n "main": "./src/index.ts",\n "module": "./dist/index.mjs",\n "types": "./src/index.ts",\n "scripts": {\n "lint": "eslint …Run Code Online (Sandbox Code Playgroud) 看起来 Nrwl/Nx 工作区中只有一个 package.json 文件。现在,如果我们有多个应用程序,每个应用程序都依赖于不同的包,那么我们必须将所有这些包包含在单个 package.json 文件中,这不会增加所有应用程序构建时的大小吗?(大概是vendor.js 文件)。
例如,如果 app-1 依赖于 d3 而 app-2 依赖于 ag-grid 库,那么这两个库是否会不必要地包含在 app-1 和 app-2 中?当 app-1 的用户访问该应用程序时,不需要为他们加载 ag-grid。
我的理解正确还是我遗漏了什么?如果我的假设是正确的,有没有办法解决这个问题?
延迟加载的库怎么样?例如,仅对某些用户(具有管理员角色)可用的“管理”库可能需要某些图形包,而不必为所有用户加载这些包。
谢谢。
我有一个相当简单的单声道存储库。它可以在 GitLab\n 上找到。这使用了纱线工作区、TypeScript、Jest、ts-jest\n和 ESLint 以及eslint-plugin-import.
我正在尝试使用 TypeScript 正确构建项目包。以前我只是将 TypeScript 文件与 JavaScript 代码一起发布在同一目录中。
\n\n我尝试构建项目可以在 GitLab 合并请求中找到\n此处
\n\n现在存储库遵循以下布局:
\n\n |- example/\n | |- index.ts\n | |- package.json\n | `- tsconfig.json\n |- packages/\n | |- koas-core/\n | | |- src/\n | | | `- index.ts\n | | |- package.json\n | | `- tsconfig.json\n | |- koas-status-code/\n | | |- src/\n | | | `- index.ts\n | | |- package.json\n | | `- tsconfig.json\n …Run Code Online (Sandbox Code Playgroud) 我正在为客户将一个大型的 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
根据本教程将我的项目结构更改为 Angular 中的 monorepo 结构后,我遇到了许多配置错误,经过大量故障排除后我设法解决了这些错误。
完整的错误读取
Cannot find "lint" target for the specified project.
You should add a package that implements linting capabilities
Run Code Online (Sandbox Code Playgroud)
此错误的一个变体是
Schema validation failed with the following errors:
Data path "" must have required property 'lintFilePatterns'.
Run Code Online (Sandbox Code Playgroud)
这两个错误都可以通过正确配置您的angular.json.
在下面查找修复的详细信息
我最近开始使用 lerna 来管理 monorepo,在开发中它运行良好。
Lerna 在我的各种包之间创建符号链接,因此像 'tsc --watch' 或 nodemon 这样的工具可以很好地检测其他包中的变化。
但是我在这种环境中创建 docker 镜像时遇到了问题。
假设我们有一个具有这种结构的项目:
root
packages
common ? artifact is a private npm package, this depends on utilities, something-specific
utilities ? artifact is a public npm package
something-specific -> artifact is a public npm package
frontend ? artifact is a docker image, depends on common
backend ? artifact is a docker image, depends on common and utilities
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在开发中,一切都很好。我正在运行某种实时重新加载服务器,并且符号链接可以正常工作,因此依赖项可以正常工作。
现在假设我想从后端创建一个 docker 镜像。
我将介绍一些场景:
我ADD在我的 Dockerfile 中打包.json,然后运行 npm install。 …
我正在研究 monorepo 的东西,发现有些人使用pnpm install在工作区中安装软件包,但其他一些人使用pnpm add.
add在 pnpm 文档中,和命令之间似乎相同install,但有一些不同的选项,例如--offline(for install)\xe3\x80\x81 --workspace(for add),如果我使用pnpm install [pkg name] --workspace,它可以正常工作。
pnpm install那么和之间有什么不同pnpm add?