我有一个基于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
的结果是创建了一个包含d.ts
文件和.js
文件的dist
文件夹。当运行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)。
根据节点文档,我认为可以通过将以下内容添加到package.json
文件来解决这个问题:
"exports": {
"./": "./dist/"
}
型
但这似乎没有任何效果。无法找到导入,除非我将额外的dist
添加到路径中。
我找到了一个lotofotherpostsallwith:
- 看起来非常复杂或绑定到特定构建系统的解决方案
- 对我的软件包的用户强制执行特殊步骤的解决方案(如使用编译器选项)
- 解决方案/建议在关闭的Github问题(关闭!=固定)
- 旧的(超过2年的互联网)帖子,可能来自
exports
选项可用之前。
我更喜欢简单地让exports
选项工作。有人知道我在设置中缺少了什么或做错了什么吗?我对整个JS/TS/npm生态系统非常陌生,所以我想我可能忽略了一些对老手来说很明显的东西。
目前,我找到的解决方法是手动重新创建tgz
文件,并从文件夹结构中删除dist
文件夹。但感觉远非完美。例如,npm install link_to_git_repo
将无法工作。
3条答案
按热度按时间laik7k3q1#
在package.json中配置typesVersions为我解决了这个问题:
字符串
hgncfbus2#
只使用
package.json
似乎是不可能的(请参阅issue on npm)。建议的解决方法是直接从dist文件夹中使用npm publish
。这可以通过一些脚本轻松实现自动化,但它只在发布到npm时有效,而不是在使用git url导入时。ebdffaop3#
我发现的唯一可靠的方法是将
package.json
复制到dist
中,然后从dist
目录发布。确保从
package.json
中删除./dist
路径。使用此方法的示例项目:https://github.com/dinomintstudio/vole。