我正在尝试设置一个包含 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)
到目前为止我已经尝试过:
"shared-ts": "../shared-ts"在 package.json 中,但它将共享 ts 复制到每个包的 node_modules 中,因此每次进行更改时我都必须重新运行yarn …我的 monorepo 中有多个项目,它们分别通过 Poetry 进行包管理。例如,
\nmonorepo\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\nRun Code Online (Sandbox Code Playgroud)\n每个项目都有自己的[tool.poetry.dependencies]和会话[tool.poetry.dev-dependencies]。然而,他们确实共享了大量的通用配置,例如
我的问题是如何定义可重用于 monorepo 项目的通用配置?
\n我正在试验纱线工作区 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来禁用错误,但我想知道是否有更好的方法来处理这个问题。 …
我已经设置了一个基本的turborepo 项目,我想.env在所有应用程序和一些包之间共享变量。如果我.env在项目的根目录中设置一个文件,所有应用程序和包如何访问它们。或者根据我的要求,我是否需要.env在所有应用程序和包中设置多个文件?
我使用 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\nRun Code Online (Sandbox Code Playgroud)\n运行npm ls确认所有内容都已正确符号链接:
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\nRun Code Online (Sandbox Code Playgroud)\n我有一个从helper.tsin导出的虚拟辅助函数shared。正在导入到index.ts中core。根package.json,tsconfig.ts和 tsconfig.build.json …
我一直在网上寻找解决我的问题的好方法,但到目前为止我还没有。
我有一个带有 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 中的想法
如果有人知道更好的方法可以做到这一点,我很想听听。
干杯。
在我的 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
任何建议可能是什么问题?
假设我有以下结构
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) 我们目前正在与我们的团队一起在我们的网站上查看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图像小.
我想开始一个同时具有web和reactnative接口的新应用程序.
我决定将所有业务 - 非环境依赖代码转移到第三个包-aka sdk-我可以在两者之间共享反应和反应原生.
所以我的项目现在有4个模块
服务器 - nodejs表达api.
有没有标准的方法来实现这样的结构?
我很可能会喜欢
**面临的挑战**
如何在同时处理sdk和Web模块的同时避免重建步骤?
monorepo ×10
node.js ×3
reactjs ×3
typescript ×3
npm ×2
react-native ×2
yarnpkg ×2
babel ×1
docker ×1
express ×1
javascript ×1
next.js ×1
nrwl-nx ×1
python ×1
turborepo ×1