Typescript npm包的简单导入语句

Typescript npm包的简单导入语句,typescript,npm,npm-publish,Typescript,Npm,Npm Publish,我想发布新的TypeScript包,并且我想能够在我的项目中使用简单的导入语句(通过单行从库中导入多个类),例如: import { FirstClass, SecondClass } from "my-repo"; 此时,我必须使用许多较长的导入语句,例如: import { FirstClass} from "my-repo/first-class"; import { SecondClass } from "my-repo/second-class"; 开始时,我使用tsc-p.构建了

我想发布新的TypeScript包,并且我想能够在我的项目中使用简单的导入语句(通过单行从库中导入多个类),例如:

import { FirstClass, SecondClass } from "my-repo";
此时,我必须使用许多较长的导入语句,例如:

import { FirstClass} from "my-repo/first-class";
import { SecondClass } from "my-repo/second-class";
开始时,我使用
tsc-p.
构建了dist包,然后运行
npm publish
。现在,我正在尝试使构建过程更简单,但是我仍然必须使用长import语句


是否有任何工具可以自动创建一个包,其中包含一个要从中导入的文件(index.ts作为main放在package.json中),或者让我手动创建main index.ts并导出所有类,每次我都会添加一个新类,并再次将其添加到index.ts?

有两种方法可以做到这一点

安装在
节点\u模块中

在这种情况下,我们希望将库安装在使用者的
node\u modules
中,并使用
node module resolution

节点模块解析
配置意味着,TypeScript编译器在您的工作区中查找
节点模块
目录,如果其中有与您的导入语句匹配的导出代码,则它将能够使用简短的导入语句解析它。您可以找到有关此的详细信息

如果您已在注册表中发布并部署了库(例如,到或部署到工件库等),则将部署的库作为依赖项添加到使用者的
package.json
,并使用
npm install
进行安装。通过此步骤,库将安装在
node_modules
中,如果在
tsconfig.json
中配置了
node module resolution
,则TypesSript编译器将能够解析简短的导入语句

此方法假定已将库部署到注册表中。如果您的库仅在本地,则的CLI可以帮助您在
node_modules
本地安装库,而无需进行任何部署。但是,还有一种替代方法,请参见下一节

直接从
dist
引用已发布的源代码

在consumer项目的
tsconfig.json
中,您可以在
编译器选项设置的
路径中指定本地发布的模块(请参阅详细信息)。这样,TypeScript编译器也将从配置的路径解析依赖关系。因此,您不需要在
节点\u模块
中安装依赖项。要使用简短的import语句,编译器将按照配置的路径找到它们

假设我有一个名为
mylib
的库。
dist
文件夹如下所示:

dist
-->my-lib
---->{all the published files of my-lib}
-->my-app
---->{all the published files of my-app}
在本例中,消费者的示例
tsconfig.json
如下所示:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "importHelpers": true,
    "target": "es5",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es2018",
      "dom"
    ],
    "paths": {
      "my-lib": [
        "dist/my-lib"
      ],
      "my-lib/*": [
        "dist/my-lib/*"
      ]
    }
  }
}
在上面的
路径中
都需要
my lib
my lib/*
<代码>我的库
可以在简短的导入语句中使用,例如:

import { MyLibModule } from 'my-lib';
tsconfig中这些条目后面的路径指向
dist
中已发布的库


据我所知,导出必须在包的
index.ts
中手动完成。

如何在我的库中自动创建index.ts(main in package.json),从子文件夹导出所有库类?我想从“我的库”导入{MyLibFirstClass,MyLibSecondClass};据我所知,导出必须在包的
index.ts
中手动完成。我不知道这方面有什么自动化工具。这就是我要找的,因为一次又一次地将每个类作为导出添加到index.ts是很无聊的。不过,非常感谢你的回答,它帮助我澄清了一些事实。