【问题标题】:How to import an npm module that has a Typescript main file in Typescript?如何在 Typescript 中导入具有 Typescript 主文件的 npm 模块?
【发布时间】:2018-08-25 12:20:31
【问题描述】:

我不知道导入 Typescript npm 模块的正确方法是什么。

这是我的尝试:

模块包.json

{
  "name": "my-module",
  "main": "src/myModule.ts"
}

模块 src/myModule.ts

export module MyModule {
  // Code inside
}

使用 npm 模块编写代码

import { MyModule } from 'my-module'; // Doesn't work
import { MyModule } = require('my-module'); // Doesn't work.

模块作为依赖安装在package.json中,例如我可以这样做

import { MyModule } from '../node_modules/my-module/src/myModule.ts';

但这显然不是很好。我想要的是一种只导入主模块文件中的任何导出的方法,但这似乎不可能。

【问题讨论】:

  • 你试过使用 import 'my-module/src/myModule' 吗??
  • 这是一个节点模块吗?如果你将它构建为 npm 包,你可以在导出库的根目录中创建一个 index.ts。然后你可以做import { MyModule } from 'MyModule'
  • 是的,这确实有效。

标签: node.js typescript npm


【解决方案1】:

您应该在 typescript 模块中使用“types”属性而不是“main”属性。 How TypeScript resolves modules

【讨论】:

    【解决方案2】:

    package.json 中的 'main' 仅对 webpack 之类的打包工具或 angular-cli 的构建工具有用。用于根据用户需求选择不同的bundle:ES6、ES5、UMD...

    TypeScript 忽略了这一点。你需要指定你想要的文件,就像你引用你自己的项目一样:

    import { MyModule } from 'my-module/src/myModule';
    

    其他库(如 Angular)所做的是创建一个桶,一个通常称为“index.ts”或“index.d.ts”的文件,用于导入和导出库中的所有类型。

    这样做的好处是,如果你在 my-module 的根目录下创建一个 index.d.ts 文件:

    export { MyModule } from './src/myModule';
    // other exports
    

    你可以这样做:

    import {MyModule} from 'my-module'
    

    作为打字稿,从文件夹导入时,会自动使用index.ts 或index.d.ts 文件。

    【讨论】:

      猜你喜欢
      • 2016-07-22
      • 1970-01-01
      • 2020-06-13
      • 1970-01-01
      • 2017-05-04
      • 2020-06-27
      • 2020-01-06
      • 1970-01-01
      • 2013-04-12
      相关资源
      最近更新 更多