标签: monorepo

使用纱线工作区在 monorepo 中的项目之间共享配置变量?

是否可以在使用纱线工作区设置的 monorepo 的子文件夹之间共享配置变量/环境变量?我们有一个项目的 monorepo,其中几个子文件夹是使用 create-react-app 构建的项目。在这些单独的文件夹中,我们可以使用 .env 文件来指定配置值,当我们在单独级别的 package.jsons 中使用构建/启动脚本时,它们会得到很好的使用。

但是,我们还有其他子文件夹,它们只是导入 CRA 应用程序的库。我们想在这些库中指定 config/env 变量,但到目前为止还没有找到一种方法来在我们构建或启动导入库的项目时传播这些值。已经在库本身以及 CRA 应用程序根文件夹中尝试过 .env 文件,但似乎没有任何效果......

monorepo yarnpkg yarn-workspaces

10
推荐指数
1
解决办法
1385
查看次数

如何在具有不同库共享变量的单一仓库中管理SCSS样式表?

我有一个角monorepo通过建立Nrwl和现在用角材料的主题化,它采用SASS。

我希望SCSS源文件在项目级别导入,在那里我将覆盖默认的颜色变量进行主题设置。

我遇到的问题是,我想将SCSS源文件导入到monorepo内的其他应用/库中,并导入到此monorepo之外的项目中。

我可以这样写导入:

@import "../other-lib/style.scss";
Run Code Online (Sandbox Code Playgroud)

...将适用于monorepo内部的任何内容。

或者我可以这样写:

@import "~@my-organization/other-lib/style.scss";
Run Code Online (Sandbox Code Playgroud)

...无法在我的Monorepo AFAIK中使用。

如何使它在两种情况下都能正常工作?

它的设置类似于下图。

在此处输入图片说明

sass monorepo angular

10
推荐指数
1
解决办法
661
查看次数

VSCode如何配置为支持Lerna Monorepo?

我有一个包含许多软件包的lerna monorepo。

我正在努力实现以下目标:

  1. 确保VSCode提供从一个软件包到另一个软件包的正确导入建议(基于软件包名称,而不是相对路径)。
  2. 确保我可以对这些导入之一进行“打开定义”,并带到该文件的src中。

对于1。我的意思是,如果我正在package-a中导航代码,并且开始键入package-b导出的函数,那么我会得到一条建议,该建议将触发添加import:`import {example} from'package- b'。

对于2。我的意思是,如果在我从导入了另一个包的另一个软件包中浏览文件时,按住alt或单击“ package-b”导出的函数的名称,则会进入“ / packages / namespace / package / b” /src/file-that-c​​ontains-function.js',

我的(lerna)monorepo是标准结构,例如,此处是发布为的“组件”包@namespace/components

- packages
    - components
       - package.json
       - node_modules
       - src
         - index.js
         - components
           - Button
             - index.js
             - Button.js
       - es
         - index.js
         - components
           - Button
             - index.js
             - Button.js
Run Code Online (Sandbox Code Playgroud)

请注意,每个组件都由目录表示,以便在必要时可以包含其他组件。在此示例中,将packages/components/index出口Button作为命名出口。文件被编译到软件包的/es/目录中。

默认情况下,VSCode为导入提供自动建议,但是这种结构使它感到困惑,并且,例如,如果需要使用monorepo中的其他软件包Button,则会自动建议以下所有导入路径:

  • packages/components/src/index.js
  • packages/components/src/Button/index.js
  • packages/components/src/Button/Button.js
  • packages/components/es/index.js
  • packages/components/es/Button/index.js
  • packages/components/es/Button/Button.js

但是,这些都不适合,因为它们将被呈现为从导入文件到导入文件的相对路径。在这种情况下,以下导入是正确的导入:

import { Button } from '@namespace/components'
Run Code Online (Sandbox Code Playgroud)

将排除项添加到项目的 …

javascript import visual-studio-code lerna monorepo

10
推荐指数
2
解决办法
438
查看次数

如何在 monorepo 中的 React Native 和 Next.js 之间共享未编译的打字稿?

我已经用 Lerna 和 Yarn Workspaces 解决了一个具有以下结构的 monorepo:

project
| - packages
    | - ReactNativeApp
    | - NextJsApp
    | - FirebaseCloudFunctions
    | - Common 
        | - src > source TypeScript
        | - lib > compiled TypeScript > published to npm for reuse by cloud functions in Firebase
    | - AppsCommon
        | - src > source TypeScript
        | - lib > compiled TypeScript
Run Code Online (Sandbox Code Playgroud)

我有几个问题。一个是 React Native 无法解析符号链接,另一个是来自 Firebase 的错误消息在从 React Native Firebase 传输到 AppsCommon 到 ReactNativeApp 时发生更改,而如果我在 ReactNativeApp 中复制 AppsCommon 源 TypeScript,则不会发生这种情况。 …

typescript react-native lerna monorepo next.js

10
推荐指数
0
解决办法
836
查看次数

在 PyCharm 中管理 Python Monorepo

我正在尝试 monorepos 和 python。这个想法是在同一个存储库中拥有多个项目,每个项目应该有自己的 virtualenv。

我发现在 PyCharm 中管理所有这些有点麻烦。

PyCharm 支持使用不同的 venvs 管理多个项目:https://www.jetbrains.com/help/pycharm/opening-multiple-projects.html ?_ga=2.5681206.409054178.1602169802-543218074.1500382704

但如果你有很多项目,那就不太友好了,我必须“打开”和“附加”每一个项目。

让我们看一下这个仓库中的一个例子:

在目录下project我有2个项目:

项目布局示例

这两个项目目录以粗体标记(就像根目录一样),基本上意味着它们是“PyCharm 项目”。

在首选项窗口下,您可以看到所有项目:

在此输入图像描述

但无法在那里添加新项目。如果我有第三个项目,我必须打开它并将其附加到当前窗口。

我错过了什么吗?有没有更简单的方法将子目录标记为项目?想象一下,克隆一个包含 10 个或更多项目的存储库,在 PyCharm 上配置所有设置将非常令人沮丧。

python virtualenv pycharm monorepo

10
推荐指数
1
解决办法
3633
查看次数

如何在 monorepo 中维护每个模块的自动更改日志?

我正在开发一个由多个 git 存储库组成的项目。有多个微服务、一个前端、一些 npm 包和网关容器等。

因为我经常遇到的问题是,对于新功能,我必须更改多个存储库中的代码,所以我在大量拉取请求中迷失了方向。

为了简化这一点,我正在考虑将存储库移动到单个 monorepo。事实上,我已经将一些 npm 包合并到一个存储库中。

到现在为止,我用于standard-version根据 git 提交创建变更日志。我仍然希望每个模块有一个变更日志。显然,这不是开箱即用的,standard-version因为它会检查每个存储库而不是每个模块目录的提交。

是否仍然可以为每个模块创建一个更改日志,例如仅使用提交消息,其中目录中的文件受到影响或在提交消息中使用范围?还有其他想法吗?

通常每个模块都有自己的版本,并不是所有的模块都是 JS/Node/npm-projects。如果我必须手动管理每个模块的发布也很好。

git version changelog monorepo

10
推荐指数
1
解决办法
382
查看次数

monorepo Yarn 工作区 - 共享 esLint 和 Prettier 配置

人们如何在 Yarn 工作区(没有 NPM、Lerna 等)之间共享 esLint/prettier 配置。

\n

我尝试让事情保持相当高的水平,但我尝试为 esLint 配置创建一个单独的包并在项目包中使用它(通过安装和扩展它),但是我遇到了两个问题:

\n
    \n
  • eslint command not found: 我是否必须将eslinteslint-config 包安装到使用 eslint-config 包依赖项的每个项目包?\n
      \n
    • 我假设通过安装eslint-configbook/package.json,eslint应该安装。我不知道为什么我会收到 eslint 命令未找到。
    • \n
    \n
  • \n
  • 只是为了调试,我安装在项目包eslintbook/package.json,它似乎不了解eslint-config. 例如:"Jest": { "testEnvrionment": "Node" }在每个项目中都被忽略。
  • \n
\n
fictional-project\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 config-packages\n\xe2\x94\x82   \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 eslint-config\n\xe2\x94\x82   \xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 settings\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 project-packages\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 book\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 book-function-as-a-service.js\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 package.json\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 src\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 index.js\n
Run Code Online (Sandbox Code Playgroud)\n

node.js eslint monorepo yarnpkg prettier

10
推荐指数
1
解决办法
8291
查看次数

如何从 monorepo 中的多个包共享 global.d.ts

我在一个文件中有多个数据库查询结果的接口定义global.d.ts。当我使用这些接口将各种项目文件夹移动到单个单一存储库中时,我仍然global.d.ts在每个包中使用与以前相同的副本,并且它工作得很好,除了重复之外,这在单一存储库中没有什么意义。

tsconfig.json在根目录下有一个共享文件,该文件由每个包中的 扩展tsconfig.json

如何将global.d.ts文件移动到 monorepo 的根目录并让所有包都使用它而不将其导入到每个源文件中?

我尝试更改每个包的 tsconfig:

"include": ["./src/**/*"],
// into
"include": ["./src/**/*", "../../types/**/*"],
Run Code Online (Sandbox Code Playgroud)

typeRoots我尝试在根 tsconfig 中添加:

"typeRoots": ["./node_modules/@types", ".types"]
Run Code Online (Sandbox Code Playgroud)

一切都无济于事。

摘要:我只想将global.d.ts每个包中当前工作文件的两个相同副本移动到公共位置中的单个文件,并使 tsc 找到它,就像每个包中有一个副本时一样。

谢谢

typescript monorepo

10
推荐指数
1
解决办法
4241
查看次数

@nrwl/nx Angular 在一次测试运行中运行所有覆盖率测试,以获取我的 mono 存储库中的所有覆盖代码

我正在我的 nx Angular monorepo 的多个项目中运行测试,并且希望获得所有项目的单个代码覆盖率报告,其中所有代码文件都从测试中隐藏。测试运行似乎将分析的代码范围限制到当前的 nx 项目,并且我没有从基础库(从多个项目使用)获取覆盖率报告。这可能不是最佳实践,但我想分析哪些代码正在使用以及哪些代码可以重构/删除。

我已经尝试过一些解决策略,但没有一个能够解决我的所有问题。

我扩展了所有项目的 jest.config.js 并添加了覆盖范围和测试报告器(目前用于在 Azure DevOps 中发布/显示的 junit 和 cobertura)

笑话配置.js


module.exports = {
    ...
    coverageReporters: ["cobertura", "html"], 
    ...
    reporters: [
        "default",
        ["jest-junit", { outputDirectory: "coverage/libs/my-lib", outputName: "junit.xml" }]
    ],
    collectCoverageFrom: [
        "**/*.{ts,tsx}",
        "!**/node_modules/**",
        "!**/coverage/**",
        "!**/vendor/**"
    ]
};

Run Code Online (Sandbox Code Playgroud)

运行所有项目

我尝试使用 nx run-many 命令运行每个应用程序和库中的所有测试。

nx run-many --all --target=test --parallel  -- --collectCoverage --coverage
Run Code Online (Sandbox Code Playgroud)

我为每个测试/覆盖率报告提供了一个覆盖率文件夹,并且可能能够将它们合并到一个报告中(例如/sf/answers/4105434301/)。但并未包含所有源文件,并且覆盖运行始终仅限于一个项目(未记录多个应用程序中库代码的使用情况)。

运行全局笑话配置

第二种方法是运行全局笑话配置,直接抛出笑话。

node \"node_modules/jest/bin/jest.js\" -c \"jest.config.js\" --coverage --collectCoverage  --coverageReporters=html --verbose=false
Run Code Online (Sandbox Code Playgroud)

我认为,这可能与第一种方法类似,因为 jest 也具有项目配置并独立运行每个项目。我得到一份覆盖范围和测试报告,其中包含所有结果。但也没有包含所有源文件,并且覆盖运行始终局限于一个项目(未记录多个应用程序中库代码的使用情况)。

module.exports = {
    projects: getJestProjects(),
    reporters: …
Run Code Online (Sandbox Code Playgroud)

code-coverage jestjs monorepo angular nrwl-nx

10
推荐指数
1
解决办法
1万
查看次数

将内部依赖项部署到 Google App Engine 的纱线工作区 monorepo 应用程序

我想将我的应用程序从 monorepo 部署到 GAE。该应用程序依赖于我预先发布到 github 包的本地包。为了让生活变得轻松,我只是告诉我的应用程序始终获取最新版本:

  "dependencies": {
    "@thecointech/email": "*",
    "@thecointech/logging": "*",
    "@thecointech/utilities": "*",
    ...
Run Code Online (Sandbox Code Playgroud)

所有这些都运行良好。

yarn.lock当我尝试将该文件包含到部署中时,问题就出现了。按照此纱线线程中的建议:https://github.com/yarnpkg/yarn/issues/5428,我将本地根复制yarn.lock到应用程序目录并尝试部署。GAE 返回错误:

error Your lockfile needs to be updated, but yarn was run with `--frozen-lockfile`
Run Code Online (Sandbox Code Playgroud)

据我所知,问题源于我的 monorepo 锁定文件不包含我自己的包的条目。在 GAE 上安装时,它正确地发现这些条目丢失并想要添加它们 - 然后我们出错了。

目前,我只是没有完全包括锁定文件和规范部门,但似乎是错误的。这应该可行,这是一个常见的用例,并且工作区已经存在了足够长的时间。你尝试过类似的事情吗?有什么方法可以强制yarn.lock包含我的依赖项吗?

google-app-engine monorepo yarnpkg

9
推荐指数
0
解决办法
685
查看次数