我npm publish
是一个模块。它很好,但是当我从注册表安装它时,结果发现它丢失了某些文件。
当我在我的模块的项目目录中运行irish-pub时,果然,输出不会列出这些文件名。
我查了一下:
.npmignore
档案。.gitignore
,但这只包含/node_modules/
还有什么可以阻止他们?
答案 0 :(得分:17)
问题是我在package.json中有一个files
数组。如果存在,则只发布指定的文件,其他所有文件都是有效的npmignored。
答案 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 打包并发布尊重您在目录树中拥有的
在我的情况下,我有一个模块,该模块使用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
文件