在我的一个 npm 包a
中,目录结构如下:
dist
├── another.cjs
├── another.d.ts
├── another.mjs
├── index.cjs
├── index.d.ts
├── index.mjs
└── types.d.ts
a
的package.json
:
{
"name": "a",
"version": "1.0.0",
"main": "dist/index.cjs",
"module": "dist/index.mjs",
"types": "dist/index.d.ts",
"exports": {
".": {
"import": "./dist/index.mjs",
"require": "./dist/index.cjs",
"types": "./dist/index.d.ts"
},
"./another": {
"import": "./dist/another.mjs",
"require": "./dist/another.cjs",
"types": "./dist/another.d.ts"
},
"./types": "./dist/types.d.ts"
},
"files": [
"dist"
],
...
}
在另一个项目中通过
import test from 'a/another'
调用 a ,然后报错:
Cannot find module 'a/another' or its corresponding type declarations.ts(2307)
查询 chatgpt 无果,所以来请教各位大佬
1
zhuisui 2023-06-27 11:39:37 +08:00
写法是不是有问题,参照 https://www.typescriptlang.org/docs/handbook/esm-node.html#packagejson-exports-imports-and-self-referencing types 写错了吧,不确定能不能用。
另外,是 IDE 报的错,还是 tsc ,还是什么程序? ts 版本支持不,要 4.7 吧,node 版本支持不? |
2
zbinlin 2023-06-27 11:45:14 +08:00
tsconfig.json 配置是怎样的
|
3
sub166 OP @zhuisui 抱歉,信息没提供全。两个项目的 ts 都是 5.1.3 ,node16 ,报错的是 ide
后面我查了 StackOverflow ,大部分的解决方案是把 tsconfig 的 moduleResolution 改成 NodeNext 但是在使用其他的 npm 包的时候,moduleResolution 为 Node 时也不会报错 |
4
sub166 OP @zbinlin 原本是 moduleResolution: Node ,改成 NodeNext 就没有问题了。但是使用其他包时不需要特地修改,很奇怪
|
5
zhuisui 2023-06-27 13:42:08 +08:00
IDE 报错了难道 tsc 没报错?有时候可能是 IDE 的问题。
另外,我倒是没用过 exports 的 typings ,我只用过 typesVersions 至于, > moduleResolution: 'node16' or 'nodenext' for Node.js’ ECMAScript Module Support from TypeScript 4.7 onwards exports 是 node16 的特性,用 nodenext 也合理吧。 |
6
zhuisui 2023-06-27 13:50:18 +08:00 1
之前我没从头到尾看这篇文档 https://www.typescriptlang.org/docs/handbook/esm-node.html
这里面开头就提了,下面的特性都是为 node ECMAScript Module 做的支持,包括使用 moduResolution: NodeNext 和 import conditions 。 不知道你说的别的 npm 包是什么情况,但这儿用了 mjs 显然应该用文档要求的使用方式。 另外,文档要求把 types 放到首行,应该是有特殊目的的。 |
7
SmiteChow 2023-06-28 09:24:19 +08:00
为什么要加最后一句废话生成器,给我整笑了
|