打字稿-转换导入以进行npm分发

时间:2018-06-25 04:24:44

标签: javascript node.js typescript npm npm-publish

我正在处理用Typescript编写的NPM程序包,并且在编译要发布的库时遇到麻烦,无法解决模块分辨率问题。

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

  

相对导入相对于导入文件已解决,无法解析为环境模块声明。您应该对自己的模块使用相对导入,以确保在运行时保持它们的相对位置。

     

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

我不想牺牲漂亮,整洁的导入,而赞成相对导入,但是我不确定如何设置编译器设置才能使其生效。在运行测试时,我指定NODE_PATH来解析模块,但这不适用于后期编译。

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

该项目托管在github here上。

相关的问题是我最终在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包时可以正确解析模块。

1 个答案:

答案 0 :(得分:0)

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

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

基本上,建议是在发布到npm之前先构建您的库。您将在输出中有两个文件。我们称它们为main.jsmain.d.ts

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

在您的package.json中,添加两行(或者,如果已有的话,请对其进行相应地更改):

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

通过这种方式,任何消耗项目的项目都不需要了解您的库的内部:他们可以使用编译后的输出,并引用生成的类型文件。