环境声明有效,但使用 pnpm 的 monorepo 工作区中会丢失“声明全局”

问题描述 投票:0回答:1

当我从另一个包导入函数时,它会丢失其类型定义。该类型是在该包内全局定义的。其他类型工作正常。 如何解决?

有必要说,我只是执行从yarn 1.22到pnpm的过渡,并且这在之前的提交中已经与yarn一起工作了。 (见底部截图)

pnpm-workspace.yaml
packages:
  - apps/*
  - packages/*
package.json
  "pnpm": {
    "overrides": {
      "holograph": "link:packages/holograph",
    }
  },
app-v2
tsconfig.json
  "include": [
    "next-env.d.ts",
    "src/**/*.ts",
    "src/**/*.tsx",
    "../../packages/**/*.ts",
    "../../packages/**/*.tsx",
    "../../packages/next-config/next.global.d.ts",
  ],

其中

apps/app-v2
(左) 从
packages/holograph
(右)进口。


此外,我注意到在环境声明文件 (

interfaces.d.ts
) 中声明类型是有效的,但在通过
declare global
 关键字贡献环境声明时不会被拾取。


恢复提交并使用

yarn
安装后,该类型再次工作。

也在 pnpm 存储库中

pnpm pnpm-workspace
1个回答
0
投票

在探索 yarnpnpm 工作区之间的差异时,我注意到

holograph
 包是从纱线工作区中的根
node_modules
进行符号链接的,但它仅链接到 pnpm 工作区中的
apps/app-v2/node_modules
中。我想这就是所谓的“包提升”或与“包提升”相关的东西,我修复它的方法是我手动指定提供类型作为根中引用的包
package.json
,这似乎是工具和 IDE 的真实来源.

所以工作状态是这样的:

apps/app-v2/package.json

  "dependencies": {
    "holograph": "*",
  },

我在根目录中添加了相同的内容

package.json

  "devDependencies": {
    "holograph": "*",
  },

结果是两个

node_modules
现在都链接了
holograph
包。

ll node_modules/ | grep holo
lrwxrwxrwx    1 qwerty qwerty     21 Jul  5 00:15 holograph -> ../packages/holograph/
ll apps/app-v2/node_modules/ | grep holo
lrwxrwxrwx 1 qwerty qwerty   27 Jul  5 00:15 holograph -> ../../../packages/holograph/

并且类型被正确拾取。

© www.soinside.com 2019 - 2024. All rights reserved.