我有一个基于Typescript的项目,其中包含多个.d.ts
文件,我希望将这些文件导出为npm
包并在另一个项目中使用。
在另一个项目中,我希望能够致电:
import {Foo} from "@my-company/project-name/x/y/Foo"
我的项目结构如下:
<project_root>
|_ node_modules
|_ src
| |_ x
| |_ y
| | |_ Foo.ts
| |_ Bar.ts
|_ package.json
|_ tsconfig.json
我的tsconfig.json
文件:
{
"compilerOptions": {
"module": "es2015",
"esModuleInterop": true,
"target": "es6",
"moduleResolution": "node",
"sourceMap": true,
"outDir": "dist",
"declaration": true
},
"lib": ["es2015"],
"include": [
"src"
],
"exclude": [
"node_modules"
]
}
运行tsc
的结果是创建了一个dist
文件夹,其中包含d.ts
文件和.js
文件。运行npm pack
时,我得到一个包含以下结构的.tgz
文件。
请注意,它在目录结构中包含 dist 文件夹。
package
|_ dist
| |_...
|_ package.json
结果是我不能写
import {Foo} from "@my-company/project-name/x/y/Foo"
但必须写
import {Foo} from "@my-company/project-name/dist/x/y/Foo"
代替(请注意路径中多余的 dist )。
基于node documentation,我想可以通过将以下内容添加到我的package.json
文件中来解决此问题:
"exports": {
"./": "./dist/"
}
但这似乎根本没有效果。除非我将多余的dist
添加到路径中,否则找不到导入。
我发现了lot of other posts all with:
exports
选项可用之前开始的。我更愿意简单地使用该exports
选项。有人知道我的设置中缺少什么或做错了什么吗?我对整个JS / TS / npm生态系统非常陌生,因此我认为我可能忽略了对退伍军人显而易见的事情。
目前,我发现的解决方法是手动重新创建tgz
文件并从文件夹结构中删除dist
文件夹。但这感觉远非完美。例如npm install link_to_git_repo
无效。
答案 0 :(得分:0)
仅使用开箱即用的package.json
似乎是不可能的(请参阅此issue on npm)。建议的解决方法是直接从dist文件夹npm publish
。这可以通过一些脚本轻松实现自动化,但仅在发布到npm时才有效,而在使用git url导入时则无效。