我开始使用 PNPM 工作区,并且我正在努力解决如何将依赖项添加到任何特定工作区,就像在纱线运行中所做的那样:
yarn workspace <workspace_name> add <package_to_add>
Run Code Online (Sandbox Code Playgroud)
或者甚至像我在纱线中那样运行特定包的脚本,例如:
yarn workspace <workspace_name> run <script>
Run Code Online (Sandbox Code Playgroud)
PNPM 社区是如何做到这一点的?您确实需要转到工作区package.json文件并手动添加它吗?
搜索文档有一段时间没有成功
谢谢!
我正在尝试将继承的 monorepo 从yarn+lerna 转换为 pnpm 工作区
由于反应版本不匹配,我目前收到错误,由于某种原因,打字稿没有选择树中最接近的 @types/react 版本
我有一个使用react 18类型的packages/web包,和一个使用react 16类型的packages/native包。
我在本机包中有很多错误,例如
'Text' cannot be used as a JSX component.
Its instance type 'Text' is not a valid JSX element.
The types returned by 'render()' are incompatible between these types.
Type 'import("~/node_modules/.pnpm/@types+react@16.14.34/node_modules/@types/react/index").ReactNode' is not assignable to type 'import("~/node_modules/.pnpm/@types+react@18.0.14/node_modules/@types/react/index").ReactNode'.
Run Code Online (Sandbox Code Playgroud)
知道如何解决这个问题吗?
我已经设置了一个 pnpm 工作区,其中包含许多我添加为 git 子模块的项目。
之前工作的 Nuxt 项目突然开始给出The request url * is outside of Vite serving allow list多个文件的错误,包括在工作区 node_modules文件夹内作为 pnpm 模块安装的依赖项。
唯一的变化是将我的项目初始化为 git 存储库。
我期望开发服务器继续工作,并且对 git 的更改不会产生任何影响。
该项目仍然构建正常。
我正在一个大型 pnpm monorepo (pnpm v7) 工作。
该存储库包含:
每个包(应用程序或共享库)都可以引用任何共享库(尽管没有循环引用)
编译设置包是 gulp helper,它为每个应用程序和一些共享组件设置编译任务。
这意味着构建顺序应该是:
尽管在每个 package.json 文件中都正确声明了依赖项(作为 devDependency 或 dependency),但 runninpnpm -r run build似乎是随机构建项目。结果是它无法编译(抱怨它缺少一些依赖包)。
我认为 pnpm 应该处理构建顺序。有什么我想念的吗?
我应该转向更复杂的工具,如turborepo 或rush 吗?
假设我想在 monorepo 中的特定包中安装一个包,如何从 root 执行此操作?
在 npm 中,你可以使用如下方法来做到这一点:
npm install react --workspace=a
Run Code Online (Sandbox Code Playgroud)
我搜索了文档,但找不到在 pnpm 中执行此操作的方法。
我正在尝试创建一个turborepo,其中包含多种类型的基础设施,例如terraform,可能有100多个“无服务器”功能。
理想情况下,我希望将它们更多地组织到有意义的子文件夹结构中,而不是拥有一个包含数百个文件夹的巨大“应用程序”文件夹。
我尝试配置 pnpm 工作区来查看嵌套文件夹,这似乎很好,尽管 Turborepo 似乎没有任何文档或选项来运行/识别嵌套文件夹。
我尝试创建一个具有一些基本功能的子目录结构,这些功能只需登录控制台即可确认 Turborepo 默认情况下会选择它们:
apps
-- functions
---- function 1
---- function 2
---- more functions
------ more function 1
------ more function 2
Run Code Online (Sandbox Code Playgroud)
每个都有自己的 package.json、名称和“dev”脚本。
不幸的是,在运行 dev 时,它看不到它们:
任何有关如何实现此目标或解决此问题的替代方法的建议都将受到赞赏,谢谢!
我有一个 monorepo,它具有非常基本的设置,可用于在此处重现此问题:
它是一个单一的 Nestjs 应用程序,有 2 个从中读取数据的包。
@nestjs/core包和主应用程序都需要其他依赖项才能工作,并且不仅在它们自己的本地 package.json 上而且与resolutions {}主 package.json 中的配置强制为完全相同的固定版本。
我可以检查锁定文件并发现,虽然使用了相同的版本,但哈希值不同,导致了 Nestjs 的重大问题,无法可靠地导入可注入依赖项,导致它在引导程序上中断。
有办法防止这种情况吗?强制链接完全相同的哈希/依赖项?
所以我正在做一个 Monorepo 项目。packages所以我的根目录中有一个目录,其中包含我所有的 npm 包。其中一些包相互依赖,例如在我可能有的 package.json 中
{
"dependencies": {
"foo": "workspace:*",
"bar": "workspace:*",
}
}
Run Code Online (Sandbox Code Playgroud)
(我使用pnpm)
所以我想知道,如果我发布这些包,所有依赖项是否仍然按应有的方式工作?
谢谢!
如果我有这样的结构
packages
- alice
- bar
- foo
package.json
Run Code Online (Sandbox Code Playgroud)
alice、bar、foo 是三个子包。bar是alice的依赖。每个子包都有自己的监视脚本,在 package.json 中定义。现在,我添加一个像 之类的脚本pnpm -r run watch,它会卡住,因为监视脚本不会完成,并且 pnpm 会等待每个命令完成,然后再运行下一个命令。因此,我们可以添加parallel并行运行它们,例如pnpm -r --parallel run watch,但在第一次运行时仍然会出错,因为 bar 尚未完成,alice 无法正确解析 bar。参见github
那么是否有任何解决方法可以使这项工作发挥作用。
我找到Manage Monorepo with pnpm,他也遇到了同样的问题,我认为他没有找到一种优雅的方法来解决这个问题。
我发现vitest使用pnpm -r --parallel --filter=./packages/** run dev,并且它有效,我不知道为什么 vitest 有效
我切换到了一个项目来构建一致的单一存储库。
我有一个非常经典的结构,包含应用程序和包文件夹。
在 packages 文件夹中,我有一堆加载函数的小包和一些我在 app/frontend 和 app/backend 应用程序中使用的类型定义。
app/frontend 应用程序是一个 next.js 应用程序,最近迁移到 next.js 13。
mon repo 的工作方式非常出色,我对整洁的代码组织非常满意。
但是,当我运行旧的 npm run dev 来构建应用程序时,我注意到应用程序的反应性大大减慢,使开发成为一场噩梦(构建需要 40-60 秒,交互式 UI 更新需要 3-10 秒) )。
是否存在我没有看到的基本错误?
这是一些背景:
应用程序/前端/next.config.js
const nextConfig ={
...
transpilePackages: ["@my-repo/package-A", "@my-repo/package-B", "@my-repo/package-C"],
reactStrictMode: true,
swcMinify: true,
...
};
Run Code Online (Sandbox Code Playgroud)
应用程序/前端/package.json
"dependencies": {
"...": "...",
"@my-repo/package-A": "workspace:*",
"@my-repo/package-B": "workspace:*",
"@my-repo/package-C": "workspace:*",
"...": "..."
}
Run Code Online (Sandbox Code Playgroud)
如果我从根文件夹中的 pnpm 启动脚本“pnpm --filter=@my-repo/frontend dev”或前端文件夹中的老式 npm run dev,则完全无关。
有什么线索吗?
非常感谢。
我预计开发服务器速度的下降会较小。
也许它可能是对自定义包的“workspace:*”引用,导致下一个开发服务器操作太多文件?我不知道。
我想设置bazel构建系统,以使用新的rules_js规则集构建包含多个 JavaScript 包的 monorepo 。rules_js的文档说它通过“工作空间”支持“monorepo 中的嵌套 npm 包”,但我不明白如何将所有内容连接起来,以便:
我尝试@npm//$DEPENDENCY在depsof 规则中使用类似js_library引用我的 npm 依赖项(如旧的rules_nodejs规则集),但我只是收到有关不存在目标的错误。
pnpm-workspace ×11
pnpm ×7
node.js ×6
monorepo ×4
turborepo ×2
typescript ×2
bazel ×1
javascript ×1
next.js ×1
npm ×1
nuxt.js ×1
reactjs ×1
vite ×1