npm publish不包含我的所有文件

slwdgvem  于 2023-06-23  发布在  其他
关注(0)|答案(6)|浏览(231)

npm publish一个模块。它上升得很好,但后来当我从注册表安装它时,它竟然丢失了某些文件。
当我在模块的项目目录中运行irish-pub时,果然输出并没有列出这些文件名。
我查过了:

  • 我没有.npmignore文件。
  • 我有一个.gitignore,但它只包含/node_modules/
  • 丢失的文件是正常的JS文件,而不是默认情况下可以忽略的文件

还有什么能挡住他们的去路?

kd3sttzy

kd3sttzy1#

问题是我在package.json中有一个files数组。如果files存在,则只发布指定的文件,其他所有文件都有效地npmignored。
https://docs.npmjs.com/cli/v9/configuring-npm/package-json#files
此外:请注意,当没有.npmignore文件且files数组为空时,.gitignore文件将被使用。从文档:
您也可以在包的根目录或子目录中提供一个.npmignore文件,这将防止文件被包括在内。在包的根目录下,它不会覆盖“files”字段,但在子目录中会覆盖。.npmignore文件的工作原理就像. gitignore。如果有一个.gitignore文件,而缺少.npmignore,则将使用.gitignore的内容。
由于.gitignore可能忽略了dist文件夹,这可能会导致问题。

oxcyiej7

oxcyiej72#

我在package.json中也有“files”属性(故意的),但是使用了以点斜杠(“./”)开头的文件和目录列表的相对路径,但是npm packnpm publish都没有使用它。删除这些,一切工作如预期!
因此更改:

"files": [ "./bin", "./lib" ]

致:

"files": [ "bin", "lib" ]

然后运行:

$ npm pack

检查gnu压缩的tarfile,最后:

$ npm publish <projectname>-<semver>.tgz
z0qdvdin

z0qdvdin3#

对于以上答案未修复的任何人,npmpack and publish尊重目录树中的任何package.json文件**,而不仅仅是根**。
在我的例子中,我有一个模块,它用ejs模板化了另一个模块,但是因为npm把子package.json当作真实的,所以它从那里阅读files,而不是捆绑我需要的所有东西。
注意任何package.json中的files,而不仅仅是根目录。

whlutmcx

whlutmcx4#

对我来说,在要发布的包文件夹中有.gitignore文件和文件列出的文件是导致问题的原因。
总的来说

"All files in the package directory are included if no local .gitignore or 
 .npmignore file exists. If both files exist and a file is ignored by .gitignore 
 but not by .npmignore then it will be included."
c9qzyr3d

c9qzyr3d5#

我刚刚遇到了同样的问题,找到了答案here
您需要包含您试图发布的目录(或tarball)的路径。虽然www.example.com上的文档npmjs.org并没有真正指出这一点,但如果运行npm help publish,您将获得手册页,其中显示正确的用法实际上是
npm publish <tarball> [--tag <tag>] npm publish <folder> [--tag <tag>]
我还发现我必须实际输入路径:我不能只使用包含package.json文件的目录中的npm publish .
希望能帮上忙。

vfwfrxfs

vfwfrxfs6#

在其他解决方案中没有提到的是,存在未记录的赛车优先级。例如,我在package.json中有"files": ["lib"]lib * 是我的gitignore*。只有这样的状态,它就能起作用。然而,* 还有 * 一个lib/path/.gitignore,它胜过了我的files数组,产生了 *no included lib文件夹 *。
教训--注意嵌套.gitignore文件

相关问题