发布到npm,`main`中定义的文件不会被发布

我试图发布一个包到npm ,由于某些原因,我在package.json定义的.js不包含在包中。 我的项目是在typescript和我transpile通过下面的npm脚本…

 "prepublishOnly": "tsc -p ./ --outDir dist/" 

哪个正确地输出文件我希望本地dist/app.js 然后我做一个npm publishreadme.md和其他一些文件发布,但不是我期望的readme.md package.json的主要设置为dist/app.js所以我在这里丢失了什么?

这是我的第一个npm包发布,所以它可能是愚蠢的,乐于尝试任何想法。

这个问题很可能是因为你有一个.gitignore文件,如果找不到.npmignore文件,那么npm将作为一个备用文件而被尊重。 我猜你正在碰到上面,可能在源代码pipe理中忽略/dist

如果没有.npmignore文件,但有一个.gitignore文件,那么npm会忽略.gitignore文件匹配的东西

main不会实际决定什么内容是包装…

主要字段是模块ID,是您程序的主要入口点。 也就是说,如果你的包被命名为foo,并且用户安装它,然后做require(“foo”),那么你的主模块的exports对象将被返回。

另外,打包文件可以通过files显式包含

 "files": ["dist/app.js", "/and/others/"] 

最后,如果你看一眼npm / issues / 3571 ,你可以通过添加一个空的.npmignore文件来解决这个问题 。

如果你想包含你的.gitignore文件排除的内容,你可以创build一个空的.npmignore文件来覆盖它。


专业提示 – 您可以在本地运行npm pack ,它将执行发布的所有生命周期钩子,并为您提供.tgz包,就好像它是从npm中获取的一样。 你可以解压缩来检查内容。 我发现这个超级有用的模拟出版物,而没有真正做到这一点。