我正在处理用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包时可以正确解析模块。
答案 0 :(得分:0)
我将遵循官方Typescript文档中的建议:
https://www.typescriptlang.org/docs/handbook/declaration-files/publishing.html
基本上,建议是在发布到npm之前先构建您的库。您将在输出中有两个文件。我们称它们为main.js
和main.d.ts
。
这里的关键点是,通过对源文件进行tsc处理,可以在npm完全涉及之前解决依赖关系,因此您可以根据需要保留引用。
在您的package.json
中,添加两行(或者,如果已有的话,请对其进行相应地更改):
{
...
"main": "./lib/main.js",
"types": "./lib/main.d.ts"
...
}
通过这种方式,任何消耗项目的项目都不需要了解您的库的内部:他们可以使用编译后的输出,并引用生成的类型文件。