npm发布isn';不包括我所有的文件

npm发布isn';不包括我所有的文件,npm,Npm,我npm发布了一个模块。它运行得很好,但当我从注册表安装它时,结果发现它丢失了某些文件 当我在模块的项目目录中运行时,果然输出没有列出这些文件名 我查过: 我没有.npmignore文件 我确实有一个.gitignore,但它只包含/node\u模块/ 丢失的文件是正常的JS文件,而不是可能丢失的文件 还有什么能阻止他们呢?我刚刚遇到了同样的问题,找到了答案 您需要包含要发布的目录(或tarball)的路径。虽然npmjs.org上的文档并没有真正指出这一点,但如果您运行npm help p

npm发布了一个模块。它运行得很好,但当我从注册表安装它时,结果发现它丢失了某些文件

当我在模块的项目目录中运行时,果然输出没有列出这些文件名

我查过:

  • 我没有
    .npmignore
    文件
  • 我确实有一个
    .gitignore
    ,但它只包含
    /node\u模块/
  • 丢失的文件是正常的JS文件,而不是可能丢失的文件

还有什么能阻止他们呢?

我刚刚遇到了同样的问题,找到了答案

您需要包含要发布的目录(或tarball)的路径。虽然npmjs.org上的文档并没有真正指出这一点,但如果您运行
npm help publish
,您将获得手册页,其中显示了正确的用法


npm发布[--tag]
npm发布[--tag]

我还发现我必须实际键入路径:我不能只使用包含我的
package.json
文件的目录中的
npm publish.


希望能有所帮助。

问题是我在package.json中有一个
文件
数组。如果存在这种情况,则仅发布指定的文件,其他所有文件都会有效地进行npmignored

我在package.json中也有“files”属性(有意),但使用了以点斜杠(./)开头的文件和目录列表的相对路径,但是
npm pack
npm publish
都无法使用该属性。删除这些,所有工作如预期

因此,改变:

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

并运行:

$ npm pack
检查gnu压缩文件,最后:

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

对于上述答案未解决的任何人,npm打包并发布尊重目录树中的任何package.json文件,而不仅仅是根目录

在我的例子中,我有一个模块用ejs模板化了另一个模块,但因为npm将child package.json视为真实的,所以它从那里读取
文件,而不是捆绑我需要的所有东西


查看任何package.json中的
文件,而不仅仅是根文件。

其他解决方案中没有提到的是,存在未记录的竞速优先级。例如,我的package.json中有
“文件”:[“lib”]
lib
是我的gitignore。只有在这种状态下,它才起作用。然而,还有一个
lib/path/.gitignore
,它胜过了我的
文件
数组,没有包含lib文件夹


教训--注意嵌套的
.gitignore
文件

对于我来说,将.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."

我从来没有指定过路径。我只是在目录中键入
npm publish
,它就发布了。这非常有用。我的
package.json
是由一个工具创建的,格式如您所述。你的改变解决了我的问题,我不能相信相对路径也是我的问题。就要写了⬆对于其他有此问题的人,请注意,当没有.npmignore文件且文件数组为空时,将使用.gitignore文件。您所说的“lib是我的gitignore”是什么意思?您将如何解决此问题,如果您找到其他
package.json
文件,我会删除其他
package.json
文件,或者从彼此的
package.json
位置重新定义子目录
文件
属性。我在编译typescript时遇到了这个问题。这些文件与package.json一起构建到一个子文件夹中。我的快速而肮脏的攻击是使用unix命令将child的package.json中的“files”重命名为“\u files”,这将导致npm忽略它。下面是我使用的命令
sed-i的/“files”:/“\u files”:/“lib/package.json
。我本来希望使用shx(unix命令的跨平台包装器),但在子目录中使用sed似乎有一个缺陷:如果它得到修复,只需在命令之前添加
shx
,它就可以在所有platformsIm维护CLI包上工作,该包从文件创建示例项目。你的帖子很有帮助。我将package.json放在dist文件夹中,作为示例项目的一部分,因此由于npm publish存在问题,我将文件名改为pkg.json,这样就不会干扰CI,并修复了命令使用时重命名pkg.json->package.json的逻辑
"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."