@types/node 安装 PnP 加载器 mjs 后不再被识别
@types/node not recognised anymore after PnP loader mjs install
我最近发现了 Yarn 3,到目前为止,我对 PnP 功能非常满意。因为我主要使用 monorepos,所以我想利用 Yarn workspaces。不幸的是,我无法让基本的东西工作。我已经建立了一个测试项目来突出问题。
设置和配置
[1] 项目结构如下
monorepo/
.env
- frontend/
- app/
- src/
- tools/
- scripts/
- src/
- script.ts
[2] 然后我通过 运行ning
初始化项目
yarn set version berry
yarn init
[3] 然后安装基本包以获取我的脚本 运行ning
yarn add -D typescript ts-node @types/node dotenv
yarn plugin import typescript
我还初始化了 scripts/
文件夹中的脚本包,运行ning yarn init
。
[4] 然后我将我的工作区添加到新创建的 package.json
// package.json
{
"name": "monorepo",
"packageManager": "yarn@3.2.0",
"devDependencies": {
"@types/node": "^17.0.22",
"dotenv": "^16.0.0",
"ts-node": "^10.7.0",
"typescript": "^4.6.2"
},
"workspaces": [
"frontend/*",
"tools/*"
],
}
[4]我运行
yarn install
yarn dlx @yarnpkg/sdks vscode
创建工作区并安装 VSCode SDK 以获得对我的 IDE.
的 Typescript 支持
到目前为止一切顺利,我可以打印工作区列表并且一切似乎都设置正确。但是,在我的 script.ts
文件中,我想从 .env
文件
中读取一个常量
// script.ts
import "dotenv/config";
const script = () => {
const getEnv = process.env.SCRIPT;
console.log(getEnv);
};
script();
我可以运行
yarn ts-node tools/scripts/script.ts
>> Hello script
没有问题。
问题
因为稍后我需要包 @graphql-codegen/cli
作为依赖项,所以我通过
安装了它
yarn workspace scripts add @graphql-codegen/cli
将 .pnp.loader.mjs
添加到根文件夹。只要 scripts/
文件夹中没有 tsconfig.json
,这不是问题!一旦我这样做,我就会得到错误
Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
在 script.ts
文件中。如果我将 "types": ["node"]
添加到 tsconfig 中的编译器选项,我会得到
Can't get definition file for 'node'.
我看过几个帖子,但无法正常工作。为什么首先要安装 .pnp.loader.mjs
?它似乎仍处于实验阶段(考虑到 Yarn 输出:
ESM support for PnP uses the experimental loader API and is therefore experimental
这让我发疯,有什么建议吗?谢谢!
好的,看来我已经解决了这个问题
我仍然不确定 .pnp.loader.mjs
到底发生了什么以及它到底做了什么。我也不知道为什么包 @graphql-codegen/cli
强制安装 PnP Loader 但它似乎无法处理工作区。我只需要通过
将 @types/node
添加到 scripts
包中的依赖项
yarn workspace scripts add @types/node
然后让我的 tsconfig.json
用于 scripts
包,例如
{
"compilerOptions": {
"types": ["node"]
}
}
更新
您似乎也可以跳过 tsconfig
中的 "types": ["node"]
。
我最近发现了 Yarn 3,到目前为止,我对 PnP 功能非常满意。因为我主要使用 monorepos,所以我想利用 Yarn workspaces。不幸的是,我无法让基本的东西工作。我已经建立了一个测试项目来突出问题。
设置和配置
[1] 项目结构如下
monorepo/
.env
- frontend/
- app/
- src/
- tools/
- scripts/
- src/
- script.ts
[2] 然后我通过 运行ning
初始化项目yarn set version berry
yarn init
[3] 然后安装基本包以获取我的脚本 运行ning
yarn add -D typescript ts-node @types/node dotenv
yarn plugin import typescript
我还初始化了 scripts/
文件夹中的脚本包,运行ning yarn init
。
[4] 然后我将我的工作区添加到新创建的 package.json
// package.json
{
"name": "monorepo",
"packageManager": "yarn@3.2.0",
"devDependencies": {
"@types/node": "^17.0.22",
"dotenv": "^16.0.0",
"ts-node": "^10.7.0",
"typescript": "^4.6.2"
},
"workspaces": [
"frontend/*",
"tools/*"
],
}
[4]我运行
yarn install
yarn dlx @yarnpkg/sdks vscode
创建工作区并安装 VSCode SDK 以获得对我的 IDE.
的 Typescript 支持到目前为止一切顺利,我可以打印工作区列表并且一切似乎都设置正确。但是,在我的 script.ts
文件中,我想从 .env
文件
// script.ts
import "dotenv/config";
const script = () => {
const getEnv = process.env.SCRIPT;
console.log(getEnv);
};
script();
我可以运行
yarn ts-node tools/scripts/script.ts
>> Hello script
没有问题。
问题
因为稍后我需要包 @graphql-codegen/cli
作为依赖项,所以我通过
yarn workspace scripts add @graphql-codegen/cli
将 .pnp.loader.mjs
添加到根文件夹。只要 scripts/
文件夹中没有 tsconfig.json
,这不是问题!一旦我这样做,我就会得到错误
Cannot find name 'process'. Do you need to install type definitions for node? Try `npm i --save-dev @types/node`.
在 script.ts
文件中。如果我将 "types": ["node"]
添加到 tsconfig 中的编译器选项,我会得到
Can't get definition file for 'node'.
我看过几个帖子,但无法正常工作。为什么首先要安装 .pnp.loader.mjs
?它似乎仍处于实验阶段(考虑到 Yarn 输出:
ESM support for PnP uses the experimental loader API and is therefore experimental
这让我发疯,有什么建议吗?谢谢!
好的,看来我已经解决了这个问题
我仍然不确定 .pnp.loader.mjs
到底发生了什么以及它到底做了什么。我也不知道为什么包 @graphql-codegen/cli
强制安装 PnP Loader 但它似乎无法处理工作区。我只需要通过
@types/node
添加到 scripts
包中的依赖项
yarn workspace scripts add @types/node
然后让我的 tsconfig.json
用于 scripts
包,例如
{
"compilerOptions": {
"types": ["node"]
}
}
更新
您似乎也可以跳过 tsconfig
中的 "types": ["node"]
。