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

Bra*_*per 20 node.js typescript monorepo npm-workspaces

我使用 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:

\n
{\n    "name": "monorepoDemo",\n    "version": "1.0.0",\n    "description": "",\n    "main": "index.js",\n    "scripts": {\n        "start": "node packages/core/src/index.ts",\n        "test": "echo \\"Error: no test specified\\" && exit 1",\n        "build": "tsc -b --verbose tsconfig.build.json"\n    },\n    "author": "",\n    "license": "ISC",\n    "workspaces": [\n        "packages\\\\core",\n        "packages\\\\shared"\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n
{\n    "compilerOptions": {\n        "composite": true,\n        "target": "es2021",\n        "module": "commonjs",\n        "declaration": true,\n        "declarationMap": true,\n        "esModuleInterop": true,\n        "forceConsistentCasingInFileNames": true,\n        "strict": true,\n        "skipLibCheck": true\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
{\n    "files": [],\n    "references": [\n      {\n          "path": "packages/core"\n      },\n      {\n          "path": "packages/shared"\n      }\n    ]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

package.json和:tsconfig.jsoncore

\n
{\n  "name": "@my-packages/core",\n  "version": "1.0.0",\n  "description": "",\n  "main": "index.js",\n  "scripts": {\n    "test": "echo \\"Error: no test specified\\" && exit 1"\n  },\n  "author": "",\n  "license": "ISC",\n  "dependencies": {\n    "@my-packages/shared": "^1.0.0"\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
{\n    "extends": "../../tsconfig.json",\n    "compilerOptions": {\n      "rootDir": "./src",\n      "outDir": "./dist",\n      "baseUrl": ".",\n      "paths": {\n        "@my-packages/shared": ["../shared"]\n        }\n    },\n    "references": [{ "path": "../shared" }],\n    "exclude": ["dist"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

package.json和:tsconfig.jsonshared

\n
{\n  "name": "@my-packages/shared",\n  "version": "1.0.0",\n  "description": "",\n  "main": "index.js",\n  "scripts": {\n    "test": "echo \\"Error: no test specified\\" && exit 1"\n  },\n  "author": "",\n  "license": "ISC"\n}\n
Run Code Online (Sandbox Code Playgroud)\n
{\n    "extends": "../../tsconfig.json",\n    "compilerOptions": {\n      "rootDir": "./src",\n      "outDir": "./dist"\n    },\n    "exclude": ["dist"]\n}\n
Run Code Online (Sandbox Code Playgroud)\n

index.ts以及和的源代码helper.ts

\n
import { helper } from "@my-packages/shared"\n\n(async () => {\n    console.log("Bootstrapping from core package")\n\n    helper()\n})()\n
Run Code Online (Sandbox Code Playgroud)\n
export function helper(): void {\n    console.log("Running from shared package")\n}\n
Run Code Online (Sandbox Code Playgroud)\n

我遇到的错误index.ts:\nCannot find module '@my-packages/shared' or its corresponding type declarations.ts(2307)

\n

我认为这与丢失的声明文件有关,因此尝试创建一个,helper.ts但没有成功

\n

Jan*_*Kim 15

mainfile 字段是package.json其他包(如 )导入该包时的入口点core

import { helper } from "@my-packages/shared"
Run Code Online (Sandbox Code Playgroud)

此代码将尝试查找@my-packages/shared/index.js不存在的 。

当您构建共享包时,构建的文件位于dist/helper.js.

更改主字段以"main": "dist/helper.js"使其正常工作。如果您使用的是 vscode,请不要忘记重新启动语言服务器。

更改前有错误

更改后没有错误

对于其他注意事项,例如特定编译器选项或 esm 支持,请参阅文档Node.js 中的 ECMAScript 模块


Dan*_*umb -1

您在和src中的路径末尾缺少 a 。referencescompilerOptioms.paths