发布到npm,未发布在`main`中定义的文件

时间:2017-11-16 21:32:58

标签: javascript node.js typescript npm

我正在尝试将包发布到npm,由于某种原因,我在.js中定义的package.json未包含在包中。我的项目是用typescript编写的,我通过以下npm脚本进行编译......

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

在本地正确输出我期望dist/app.js的文件。然后我会发布npm publish并发布readme.md和其他一些文件,但不会发布我期望的app.jspackage.json主要设置为dist/app.js所以我在这里缺少什么?

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

1 个答案:

答案 0 :(得分:4)

问题很可能是因为你有一个.gitignore文件,如果找不到.npmignore文件,npm将尊重该文件。我猜你是否遇到了上述问题,或许忽略了源代码管理中的/dist

  

如果没有.npmignore文件,但有一个.gitignore文件,那么   npm将忽略.gitignore文件匹配的内容

main实际上并不会决定打包的内容......

  

主要字段是模块ID,它是您的主要入口点   程序。也就是说,如果您的包名为foo,并且用户安装   它,然后需要(" foo"),然后你的主要模块的出口   对象将被退回。

此外,打包文件可以通过files

明确包含在内
"files": ["dist/app.js", "/and/others/"]

最后,如果您查看npm/issues/3571,只需添加一个空的.npmignore文件即可解决此问题。

  

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

专业提示 - 您可以在本地运行npm pack,这将执行发布的所有生命周期挂钩,并为您提供.tgz包,就好像它是从npm获取的一样。您可以解压缩此内容以检查内容。我发现这在很多场合都非常有用,可以模仿发布而不会实际发布。