我正在尝试让 Node 子路径导入和打字稿正常工作。我的 IDE 在解析导入时没有问题,但 Typescript 从来不高兴。
包含代码的 Github 存储库:https://github.com/doronrosenberg/ts-subpath-imports。
包.json:
"imports": {
"#internal/*": "./internal/*.ts",
"#internal2": "./internal"
}
Run Code Online (Sandbox Code Playgroud)
tsconfig.json:
"paths": {
"#internal/*": "./internal/*.ts",
"#internal2": ["./internal"]
}
Run Code Online (Sandbox Code Playgroud)
和代码:
import { foo } from "#internal/index";
import { bar } from "#internal2";
Run Code Online (Sandbox Code Playgroud)
无论我如何设置,我总是得到:
src/test.ts:1:21 - error TS2307: Cannot find module '#internal/index' or its corresponding type declarations.
1 import { foo } from "#internal/index";
~~~~~~~~~~~~~~~~~
src/test.ts:2:21 - error TS2307: Cannot find module '#internal2' or its corresponding type declarations.
2 import { bar …Run Code Online (Sandbox Code Playgroud) 这是我第一次尝试使用 TypeScript 创建 npm 包,并且遇到了一些麻烦,可能是因为我误解了文档中的某些内容。\n在撰写本文时,我正在使用 Node 16.16.0 和 npm 8.13.2这。
\n首先,我的项目结构如下所示。
\nsrc/\n\xe2\x94\x9c\xe2\x94\x80 module1/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 index.ts\n\xe2\x94\x9c\xe2\x94\x80 module2/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 index.ts\npackage.json\ntsconfig.json\nRun Code Online (Sandbox Code Playgroud)\ntsconfig.json
\n{\n "compilerOptions": {\n "target": "es2017",\n "module": "commonjs",\n "esModuleInterop": true,\n "declaration": true,\n "outDir": "./lib",\n "strict": true\n },\n "include": ["src"],\n "exclude": ["node_modules", "**/__tests__/*"]\n}\nRun Code Online (Sandbox Code Playgroud)\n包.json
\n{\n "name": "@owner/mypackage",\n "version": "v1.0.0",\n ...\n "files": [\n "lib/**/*"\n ],\n "type": "module",\n "exports": {\n "./module1": "./lib/module1/index.js",\n "./module2": "./lib/module2/index.js",\n "./package.json": "./package.json"\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n问题是,当发布模块时,它会生成以下结构:
\nlib/\n\xe2\x94\x9c\xe2\x94\x80 module1/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 index.js\n\xe2\x94\x9c\xe2\x94\x80 module2/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80 index.js\npackage.json\nRun Code Online (Sandbox Code Playgroud)\n留给我以下导入结构: …
我编写了一个包(我们称之为它)commons和另一个导入它的项目。
我不想导入整个包,而只想导入该包的一个子路径。
import { client } from '@commons/clients'相反,import { client } from '@commons'
我看到了诸如jose之类的打字稿包可以实现这种行为。
例如import createRemoteJWKSet from 'jose/jwks/remote'。
经过一番研究,我确实发现我可以package.json用 key 来定义这种行为exports。js不幸的是,据我测试,这似乎只适用于纯文本,不适用于打字稿。另外,我发现打字稿exports在某些线程中尚不支持。像这样的包如何jose管理这个?