如何从 NPM 包中排除 'bin' 个文件?

How to exclude 'bin' files from NPM package?

编辑:不确定初始测试中发生了什么,但 .gitignore.npmignore 现在正在努力根据需要排除 bin 文件。

我有一个简单的 NPM 包,它只是通过从 GitHub 下载安装一个二进制文件。我的目标是将二进制文件排除在已发布的包之外,让脚本安装它。我的想法是安装脚本可能需要根据主机平台安装不同的二进制文件,其次,不需要用二进制文件来膨胀包大小。

问题是我似乎无法让 NPM 忽略 'bin' 文件。我试过使用 .gitignore.npmignorepackage.json 'files' 属性以及将 bin 文件放在 bin 以外的文件夹中,看起来NPM 坚持包含 'bin' 文件。相关的package.json基本上是:

{
  "bin": {
    "my-bin": "./bin/my-bin"
  },
  "files": [ "bin-install.sh" ],
  "scripts": {
    "preinstall": "./bin-install.sh"
  },
}

作为一种解决方法,我可以像这样处理 'bin' 目录的存在:

"scripts": {
  "preinstall": "./bin-install.sh",
  "prepublishOnly": "! [[ -d bin ]] || mv bin tmp",
  "prepack": "npm run prepublishOnly",
  "postpublish": "! [[ -d tmp ]] || mv tmp bin",
  "postpack": "npm run postpublish"
}

这行得通,但看起来很丑,让我觉得我错过了一些导致我违背常规的东西。

是否有更简洁的方法来实现我想要做的事情?

.npmignore 应该可以,这里是 the docs。您没有显示您尝试设置忽略的具体方式,但听起来您一直在尝试忽略 bin/ 中的所有文件,所以这就是您需要的:

# inside .npmignore
bin/