对于以上答案未修复的任何人,npmpack and publish尊重目录树中的任何package.json文件**,而不仅仅是根**。 在我的例子中,我有一个模块,它用ejs模板化了另一个模块,但是因为npm把子package.json当作真实的,所以它从那里阅读files,而不是捆绑我需要的所有东西。 注意任何package.json中的files,而不仅仅是根目录。
"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."
6条答案
按热度按时间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
文件夹,这可能会导致问题。oxcyiej72#
我在package.json中也有“files”属性(故意的),但是使用了以点斜杠(“./”)开头的文件和目录列表的相对路径,但是
npm pack
和npm publish
都没有使用它。删除这些,一切工作如预期!因此更改:
致:
然后运行:
检查gnu压缩的tarfile,最后:
z0qdvdin3#
对于以上答案未修复的任何人,npmpack and publish尊重目录树中的任何package.json文件**,而不仅仅是根**。
在我的例子中,我有一个模块,它用ejs模板化了另一个模块,但是因为npm把子package.json当作真实的,所以它从那里阅读
files
,而不是捆绑我需要的所有东西。注意任何package.json中的
files
,而不仅仅是根目录。whlutmcx4#
对我来说,在要发布的包文件夹中有.gitignore文件和文件列出的文件是导致问题的原因。
总的来说
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 .
。希望能帮上忙。
vfwfrxfs6#
在其他解决方案中没有提到的是,存在未记录的赛车优先级。例如,我在package.json中有
"files": ["lib"]
。lib
* 是我的gitignore*。只有这样的状态,它就能起作用。然而,* 还有 * 一个lib/path/.gitignore
,它胜过了我的files
数组,产生了 *no included lib文件夹 *。教训--注意嵌套
.gitignore
文件