【问题标题】:Typescript module resolution fails despite "main" property set in package.json尽管 package.json 中设置了“main”属性,但 Typescript 模块解析失败
【发布时间】:2018-06-17 23:52:36
【问题描述】:

在下面的文件夹结构中,我想以这种方式将我的组件导入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,它会起作用,但我认为package.json 中的main 的目的正是为了做我正在尝试的事情。谢谢!

【问题讨论】:

    标签: reactjs typescript module


    【解决方案1】:

    main 字段仅支持解析带有 .js 扩展名的模块,types 字段(TypeScript 类似于 main)支持 .d.ts 字段。 TypeScript module resolution docs 仅描述这些扩展的用法。

    这背后的原因是这些字段旨在与已发布的包一起使用。 .ts(或 .tsx 在您的情况下)文件是旨在转换为生产就绪 JavaScript(和辅助元数据文件)的开发文件。如果发布的包甚至包含.ts 文件(而不是它们生成的.d.ts.js.js.map 输出),那么尝试要求这些文件将是非常不可取的。

    你的 TypeScript 在执行之前总是被转译成 JS。编译器对 TypeScript 文件的简化包含的支持假定这些包含也在运行时之前被转译。

    只要您的tsconfig.json 配置为输出声明(和源映射)文件:

    "compilerOptions": {
        "declaration": true,
        "sourceMap": true,
        ...
    

    您可以将 maintypes 字段指向输出文件:

    "main": "myComponent.js",
    "types: "myComponent.d.ts",
    

    一旦创建了这些文件,它们就会正确解析。请注意,这意味着如果您使用任何编码帮助,通常意味着您必须重新编译才能获得更新的提示。

    如果您想要自动代码辅助,index.tsx 可能是更好的途径。如果你真的想避免连续编辑多个 index.tsx 文件,你可以让它们重新导出模块:

    export * from '/MyComponent';
    

    编辑:包括实际解决方案...

    【讨论】:

    • 感谢您的详尽回答!那么,您是说在 Typescript 中没有简单的方法可以做到这一点(或者根本没有办法),而您的建议是坚持使用 index.tsx 文件?我发现随着库的增长,在 VS Code 中打开许多 index.tsx 文件非常烦人。
    • 我更新了我的答案;我很抱歉我之前不得不有点突然离开。附带说明一下,我不经常使用 VS Code,但是如果两者同时打开,一些编辑器(在我的例子中是 WebStorm)会显示 MyComponent/index.tsxOtherFolder/index.tsx。 VS Code 可能有一个扩展。
    • 太好了,谢谢。我恢复到索引,但我现在明白为什么它不起作用了。我再试一次!
    • 我不敢相信,在将近 2.5 年后,这仍然是不可能的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2019-04-08
    • 1970-01-01
    相关资源
    最近更新 更多