0

我正在开发一个用 Typescript 编写的 NPM 包,在编译要发布的库时,我无法解决模块解析问题。

在整个项目中,我一直在使用非相对导入来避免../../../. 但是,我在打字稿文档中读到应该在项目中使用相对导入。

相对导入是相对于导入文件解析的,不能解析为环境模块声明。你应该为你自己的模块使用相对导入,保证在运行时保持它们的相对位置。

可以相对于 baseUrl 或通过路径映射来解析非相对导入,我们将在下面介绍。它们还可以解析为环境模块声明。导入任何外部依赖项时使用非相对路径。

我不想牺牲漂亮、整洁的导入来支持相对导入,但我不确定如何设置编译器设置以使其正常工作。运行测试时,我指定NODE_PATH以解析模块,但这不适用于后编译。

我希望能够使用非相对导入来编写文件,但是以某种方式对它们进行转换,以便dist/文件可以解析导入。

该项目托管在github 上。

相关问题是我的index.d.ts文件dist/夹中的文件如下所示:

import { Emitter } from 'emitter';
import { Schema } from 'migrations';
import { Model, model, relation } from 'model';
import { Builder } from 'query';

export { Builder, Emitter, Model, model, relation, Schema };

但是所有模块都有模块无法解决的错误。如何以当前形式保留这些导入,但在构建时以某种方式对其进行转换,以便在发布 npm 包时,可以正确解析模块。

4

1 回答 1

0

我会遵循官方 Typescript 文档中的建议:

https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html

基本上,建议是在发布到 npm 之前构建您的库。您将在输出中有两个文件;让我们打电话给他们main.jsmain.d.ts

这里的关键点是,通过 tsc-ing 您的源文件,您可以在涉及 npm 之前解决依赖关系,因此您可以根据需要保留引用。

在您的package.json, 包括两行(或相应地更改它们,如果您已经拥有它们):

{
    ...
    "main": "./lib/main.js",
    "types": "./lib/main.d.ts"
    ...
}

这样,任何消费项目都不需要了解库的内部结构:他们可以只使用编译后的输出,引用生成的类型文件。

于 2018-06-25T07:45:05.123 回答