npm发布并不包括我的所有文件

时间:2014-11-20 20:43:29

标签: npm

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

当我在我的模块的项目目录中运行irish-pub时,果然,输出不会列出这些文件名。

我查了一下:

  • 我没有.npmignore档案。
  • 我有一个.gitignore,但这只包含/node_modules/
  • 缺少的文件是普通的JS文件,而不是ignored by default

还有什么可以阻止他们?

6 个答案:

答案 0 :(得分:17)

问题是我在package.json中有一个files数组。如果存在,则只发布指定的文件,其他所有文件都是有效的npmignored。

https://docs.npmjs.com/files/package.json

答案 1 :(得分:8)

我在package.json中也有(filesaly)的“files”属性,但是使用以斜杠(“./”)开头的文件和目录列表的相对路径,但是npm pack都没有也没有npm publish使用它。删除这些,都按预期工作!

所以改变:

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

为:

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

并运行:

$ npm pack

检查gnu zipped tarfile和finaly:

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

答案 2 :(得分:7)

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

在我的情况下,我有一个模块,该模块使用ejs模板化了另一个模块,但是因为npm将子package.json视为真实,所以它从那里读取files而不捆绑我需要的所有内容。

在所有package.json中寻找files,而不仅仅是您的根。

答案 3 :(得分:2)

对我来说,要发布的包文件夹中包含.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."

答案 4 :(得分:1)

我遇到了同样的问题并找到了答案here

您需要包含您尝试发布的目录(或tarball)的路径。虽然npmjs.org上的文档并没有真正表明它,但如果你运行npm help publish,你将获得手册页,这表明正确的用法实际上是

npm publish <tarball> [--tag <tag>] npm publish <folder> [--tag <tag>]

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

希望有所帮助。

答案 5 :(得分:0)

在其他解决方案中未提及的事情是,有一个未记录的,竞速优先级。例如,我的package.json中有"files": ["lib"]lib 是我的gitignore 。仅具有该状态,它就可以工作。但是,还有 一个lib/path/.gitignore,它胜过我的files数组,产生了不包含lib文件夹

课程-注意嵌套的.gitignore文件