【问题标题】:Publishing to npm, file defined in `main` is not published发布到 npm,`main` 中定义的文件未发布
【发布时间】:2018-04-30 13:39:32
【问题描述】:

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

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

正确输出我期望在本地dist/app.js 的文件。然后我做了一个npm publishreadme.md 和其他一些文件,但不是我期望的app.jspackage.json 的主要设置为 dist/app.js 那么我在这里缺少什么?

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

【问题讨论】:

  • 您的.gitignore 是否排除dist/
  • 确实如此,但我的 .npmignore 应该覆盖它,不是吗?

标签: javascript node.js typescript npm


【解决方案1】:

这个问题很可能是因为你有一个.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 获取的一样。您可以解压缩它以检查内容。我发现这在很多情况下都非常有用,可以在没有实际操作的情况下模拟发布。

【讨论】:

  • 很好的回应,有很多东西可以尝试谢谢。如果我清空我的.npmignore 并打包,我会得到除dist 文件夹之外的所有内容,我认为这是因为我的转译只发生在发布前。
  • 我通过显式添加 files: [] 条目解决了这个问题,但对于为什么它不能与空的 .npmignore 一起使用仍然有点困惑,但来自 dist 的文件现在已打包,所以我很开心!为npm pack 命令加倍+1,这可以节省大量时间!
猜你喜欢
  • 2021-08-04
  • 2019-06-13
  • 2021-02-11
  • 1970-01-01
  • 2022-01-24
  • 2019-10-15
  • 1970-01-01
  • 2020-05-01
  • 2021-02-08
相关资源
最近更新 更多