标签: monorepo

在 monorepo 中共享打字稿库

我正在尝试设置一个包含 3 个共享一些库代码的服务的 monorepo。

这是目前的情况:

repo: web
pdf/
  package.json
    reference to shared-ts using github url
  tsconfig.json
frontend/
  package.json
    reference to shared-ts using github url
  tsconfig.json
Run Code Online (Sandbox Code Playgroud)
repo: mobile (react-native)
  package.json
    reference to shared-ts using github url
  tsconfig.json
Run Code Online (Sandbox Code Playgroud)
repo: shared-ts
  package.json
  tsconfig.json
Run Code Online (Sandbox Code Playgroud)

这可行,但提交shared-ts、构建、更改哈希package.json并再次提交是一件痛苦的事情。

这就是我想要实现的目标:

repo: monorepo
pdf/
  package.json
    reference to ../shared-ts
  tsconfig.json
frontend/
  package.json
    reference to ../shared-ts
  tsconfig.json
mobile/
  package.json
    reference to ../shared-ts
  tsconfig.json
shared-ts/
  package.json
  tsconfig.json
Run Code Online (Sandbox Code Playgroud)

到目前为止我已经尝试过:

  • TypeScript项目引用,但似乎没有办法在shared-ts项目中具有依赖关系
  • "shared-ts": "../shared-ts"在 package.json 中,但它将共享 ts 复制到每个包的 node_modules 中,因此每次进行更改时我都必须重新运行yarn …

javascript npm typescript react-native monorepo

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

如何使用 Poetry 在 monorepo 中重用 pyproject.toml?

我的 monorepo 中有多个项目,它们分别通过 Poetry 进行包管理。例如,

\n
monorepo\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 a\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 b\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 c\n    \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n
Run Code Online (Sandbox Code Playgroud)\n

每个项目都有自己的[tool.poetry.dependencies]和会话[tool.poetry.dev-dependencies]。然而,他们确实共享了大量的通用配置,例如

\n
    \n
  • [工具.taskipy.任务]
  • \n
  • [工具.isort]
  • \n
  • [工具.黑色]
  • \n
  • ...
  • \n
\n

我的问题是如何定义可重用于 monorepo 项目的通用配置?

\n

python monorepo python-poetry pyproject.toml

23
推荐指数
1
解决办法
3434
查看次数

纱线工作区、反应、monorepo 问题与冲突库版本

我正在试验纱线工作区 monorepo。它由一个用 创建的 TestProjectcreate-react-app和一个用创建的 SharedLib1 组成create-react-library。TestProject 从 SharedLib1 导入代码。问题是,TestProject 使用依赖于 babel-jest ^24.9.0 的 react-scripts 3.3.0,而 SharedLib1 使用依赖于 babel-jest 22.4.4 的 react-scripts-ts ^2.16.0。yarn start在 TestProject 中运行时,它抱怨:

The react-scripts package provided by Create React App requires a dependency:

  "babel-jest": "^24.9.0"

Don't try to install it manually: your package manager does it automatically.
However, a different version of babel-jest was detected higher up in the tree:

  /monoRepo/node_modules/babel-jest (version: 22.4.4) 
Run Code Online (Sandbox Code Playgroud)

我可以通过SKIP_PREFLIGHT_CHECK=true在 TestProject 中设置或手动升级 SharedLib1 中的 react-scripts来禁用错误,但我想知道是否有更好的方法来处理这个问题。 …

reactjs create-react-app monorepo yarnpkg yarn-workspaces

22
推荐指数
1
解决办法
1427
查看次数

在turborepo monorepo项目之间共享环境变量

我已经设置了一个基本的turborepo 项目,我想.env在所有应用程序和一些包之间共享变量。如果我.env在项目的根目录中设置一个文件,所有应用程序和包如何访问它们。或者根据我的要求,我是否需要.env在所有应用程序和包中设置多个文件?

environment-variables node.js monorepo turborepo

20
推荐指数
2
解决办法
2万
查看次数

NPM 工作区 Typescript 无法找到本地模块

我使用 NPM 工作区和 Typescript 设置了 NodeJS monorepo。它在没有 Typescript 的情况下工作得很好,但是引入 TS 会带来一些依赖解决错误。当前目录设置:

\n
+-- node_modules\n+-- package.json\n+-- tsconfig.json\n+-- tsconfig.build.json\n+-- packages\n    +-- core\n    |   +-- package.json\n    |   +-- tsconfig.json\n    |   +-- src\n        |   +-- index.ts\n    +-- shared\n    |   +-- package.json\n    |   +-- tsconfig.json\n    |   +-- src\n        |   +-- helper.ts\n
Run Code Online (Sandbox Code Playgroud)\n

运行npm ls确认所有内容都已正确符号链接:

\n
monorepoDemo@1.0.0 C:\\Users\\<user>\\Documents\\Temp\\monorepoDemo\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\xac @my-packages/core@1.0.0 -> .\\packages\\core\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 @my-packages/shared@1.0.0 deduped -> .\\packages\\shared\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 @my-packages/shared@1.0.0 -> .\\packages\\shared\n
Run Code Online (Sandbox Code Playgroud)\n

我有一个从helper.tsin导出的虚拟辅助函数shared。正在导入到index.tscore。根package.json,tsconfig.tstsconfig.build.json …

node.js typescript monorepo npm-workspaces

20
推荐指数
2
解决办法
2万
查看次数

NX 和 NextJS monorepo 中的全局类型声明

我一直在网上寻找解决我的问题的好方法,但到目前为止我还没有。

我有一个带有 NextJS 的 NX monorepo,我正在尝试创建一个types/可供我的所有应用程序和库使用的全局文件夹。

我原以为这会很简单,我会在根目录中添加一个文件夹并将所有文件放在.d.ts那里。然后在 tsconfig.base.json 中我添加

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

我希望事情就这么简单。

允许我在 monorepo 中的任何地方使用我的输入,而无需导入它们。

不幸的是,这不起作用。经过大量的混乱后,我确实设法让它工作,但前提是该types/文件夹位于应用程序内部,例如:

apps/
    /myApp/
          /types/            <- types here were detected
types/                       <- types here were not detected
tsconfig.base.json
Run Code Online (Sandbox Code Playgroud)

这对我来说没有好处,因为这意味着我必须在所有应用程序和库中复制我的类型。

NX 的官方建议是添加一个新的库来存储您的类型,然后导入它并在每个应用程序和库中使用它,但这对我来说真的很笨重。typeRoots另外,这并不真正适用于将其添加到tsbase.config.json 中的想法

如果有人知道更好的方法可以做到这一点,我很想听听。

干杯。

typescript reactjs monorepo next.js nrwl-nx

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

工作区仍在吊装的 nohoist

在我的 Monorepo 里面,我有一个包,我想要它的 node_modules 中的所有依赖项。

但无论我做什么,它的 node_modules 仍然是空的。

因此,出于我的问题的目的,我能够通过以下设置重现该问题

/
 package.json
 lerna.json
 node_modules
 packages/
          A/
            node_modules
            package.json
            index.ts
          B/
            node_modules
            package.json
            index.ts
Run Code Online (Sandbox Code Playgroud)

我为此创建了一个回购

主包.json

{
  "name": "A-B-test",
  "private": true,
  "workspaces": {
    "packages": ["packages/*"],
    "nohoist": [ "**/B" ]
  },
  ...
  "devDependencies": {
    "lerna": "^3.13.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

B/package.json 好像

{
  "name": "@scaljeri/B",
  "version": "1.0.0",
  "main": "index.js",
  "license": "MIT",
  "dependencies": {
    "angular": "^1.7.8"
  },
  "devDependencies": {
    "browserify": "^16.2.3",
    "typescript": "^3.5.2"
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,当我yarn在项目的根目录中运行时,所有依赖项都安装在根目录中node_modules

纱线版本:1.16.0 节点:12.4.0

任何建议可能是什么问题?

monorepo yarnpkg yarn-workspaces

17
推荐指数
3
解决办法
9862
查看次数

NPM 8 工作区 - 安装一个包作为 monorepo 中另一个包的依赖项

假设我有以下结构

packages
  - @my-scope/packageA
  - @my-scope/packageB
  - @my-scope/packageC
Run Code Online (Sandbox Code Playgroud)

假设我想安装 packageA 作为 packageB 的依赖项。对于 NPM 8 工作区,我认为应该这样做: npm install @my-scope/packageA --workspace=@my-scope/packageB

相反,我得到这个:

npm ERR! 404 Not Found - GET https://registry.npmjs.org/@my-scope%2fpackageA - Not found 
npm ERR! 404
npm ERR! 404  '@my-scope/packageA@*' is not in this registry.
npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
npm ERR! 404
npm ERR! 404 Note that you can also install from a
npm ERR! 404 tarball, folder, http …
Run Code Online (Sandbox Code Playgroud)

npm monorepo npm-workspaces

17
推荐指数
1
解决办法
9536
查看次数

如何从具有纱线工作空间的monorepo中的nodejs项目构建泊坞窗图像

我们目前正在与我们的团队一起在我们的网站上查看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图像小.

node.js express docker monorepo yarn-workspaces

16
推荐指数
1
解决办法
1658
查看次数

在create react app Reactjs应用程序中使用常见的Sdk模块共享代码库

我想开始一个同时具有web和reactnative接口的新应用程序.

我决定将所有业务 - 非环境依赖代码转移到第三个包-aka sdk-我可以在两者之间共享反应和反应原生.

所以我的项目现在有4个模块

  1. 网络 - 用cra创建
  2. Sdk - 主要是redux + redux saga +反应容器+ Hoc's
  3. 移动 - 反复原生
  4. 服务器 - nodejs表达api.

    • 所有的网络,移动和服务器都将依赖于Sdk模块.
    • sdk模块将依赖于服务器模块 - 主要是为了暗示模拟和数据接口.

有没有标准的方法来实现这样的结构?

我很可能会喜欢

  • 使用纱线工作区将所有节点模块提升到一个文件夹中,以避免在每个项目中重新安装包
  • 我将同时在所有4个项目中工作,所以我需要hotreload才能意识到这一点.

**面临的挑战**

  1. Cra不会在src文件夹之外转换代码,所以虽然web项目确实刷新,但是我在sdk上做了更改.它无法理解es6代码.
  2. Jest也不了解node_modules中的es6

如何在同时处理sdk和Web模块的同时避免重建步骤?

babel reactjs react-native create-react-app monorepo

16
推荐指数
2
解决办法
492
查看次数