尽管在package.json中设置了“ main”属性,打字稿模块解析仍失败
在下面的文件夹结构中,我想以App.tsx
这种方式导入我的组件:
import MyComponent from './MyComponent';
尽管我的package.json
文件main
设置了属性,但Typescript会引发错误:
找不到模块“ ./MyComponent”`
src/|- App.tsx
|- MyComponent/
| |- MyComponent.tsx
| |- package.json
| |- ...
MyComponent.tsx:
export default class extends Component { ...
}
package.json:
{ "name": "my-component",
"version": "0.0.0",
"main": "MyComponent.tsx"
}
如果我更改MyComponent.tsx
为index.tsx
,则可以使用,但是我认为main
in
的目的package.json
是完全按照我的意图进行。谢谢!
回答:
该main
字段仅支持带有.js
扩展名的解析模块,并且该types
字段(与TypeScript类似main
)支持.d.ts
字段。该打字稿模块分辨率文档只描述了这些扩展用途。
其背后的原因是,这些是供发布的软件包使用的字段。.ts
(或.tsx
您的情况)文件是旨在转换为可用于生产环境的JavaScript的开发文件(以及辅助元数据文件)。如果已发布的包,甚至包括.ts
文件(而不是他们造成.d.ts
,.js
和.js.map
输出),试图要求这些文件将是非常不可取的。
在执行之前,您的TypeScript始终会转换为JS。编译器对TypeScript文件的简化包含的支持假定运行时之前还对这些包含进行了转译。
只要将您tsconfig.json
配置为输出声明(和源映射)文件:
"compilerOptions": { "declaration": true,
"sourceMap": true,
...
您可以将main
和types
字段指向输出文件:
"main": "myComponent.js","types: "myComponent.d.ts",
创建这些文件后,它们将正确解析。请注意,这意味着如果您使用任何编码帮助,通常意味着您必须重新编译才能获取更新的提示。
如果您需要自动代码协助,则index.tsx
可能是更好的方法。如果您确实想避免连续编辑多个index.tsx
文件,则可以让它们重新导出模块:
export * from '/MyComponent';
编辑:包括实际的解决方案…
以上是 尽管在package.json中设置了“ main”属性,打字稿模块解析仍失败 的全部内容, 来源链接: utcz.com/qa/424793.html