为什么我的Node.js包在全局安装时缺少主文件?

为什么我的Node.js包在全局安装时缺少主文件?,node.js,npm,npm-install,Node.js,Npm,Npm Install,问这个问题感觉很尴尬,但最近我向NPM注册表发布了一个节点包,现在我发现它不起作用 问题似乎是我的主文件/src/index.js,没有包含在全局安装中 我知道这一点,因为当我从命令行调用包时 按预期在包中运行/bin/cli.js,然后抛出: Error: Cannot find module '../src/index.js' Require stack: - /usr/lib/node_modules/diffcraft/bin/cli.js 该错误甚至引用了/bin/cli.js中索

问这个问题感觉很尴尬,但最近我向NPM注册表发布了一个节点包,现在我发现它不起作用

问题似乎是我的主文件
/src/index.js
,没有包含在全局安装中

  • 我知道这一点,因为当我从命令行调用包时 按预期在包中运行
    /bin/cli.js
    ,然后抛出:

    Error: Cannot find module '../src/index.js'
    Require stack:
    - /usr/lib/node_modules/diffcraft/bin/cli.js
    
    该错误甚至引用了
    /bin/cli.js
    中索引 文件是必需的,所以这就是问题所在

  • 我也知道这一点,因为我检查了模块所在的文件夹 全局安装,当
    bin
    文件夹存在时,
    src
    文件夹不是。所以我的包的主代码就不存在了

发现这一点后,我甚至对package.json进行了修补,以确保
/src/index.js
文件
数组中被明确列为白名单。我以前没有这样做过,因为它声明在
main
下列出的任何文件也会自动被列入白名单。但即使在
文件
中明确包含该文件,也没有起作用

作为参考,我没有
.npmignore
文件

我有一种可怕的感觉,我错过了一些简单和基本的东西。。。知道为什么我的主文件会被跳过吗


该软件包是。

如果您忽略文件前面的
/
(在Windows上使用npm 6.14.4进行测试),则该软件包有效:

这可能是npm中的一个bug

通过运行
npm-pack
并检查存档文件,您可以在不发布的情况下对此进行检查


另一种选择是使用
.npmignore
文件。

如果您包含一个指向存储库的链接,那么这里的人可能会更好地帮助您,这样我们就可以准确地看到您拥有的内容、package.json中的内容、存储库中的内容等。…@jfriend00-运行
npm repo diffcraft
命令将带您到github repo.FYI,这与全球安装无关。如果在本地安装,同样的问题也会发生。安装中不包括
src
目录。请从您的projects package.json中完全省略
files
字段/键-这两个文件的路径名已通过
main
bin
定义。我发现您发布的npm模块的存档中不包含所需的目录。因此,在发布过程中似乎出现了一些问题。但是为什么默认情况下不包括
src
目录?您不必显式地命名目录,使其成为包的一部分,对吗?从
字段中省略
/
并删除
文件
数组似乎具有相同的效果。出于某种原因,我不需要为
bin
字段设置相同的值;使用或不使用
/
拾取的。我不知道为什么,但这种方法似乎有效——我只需再运行一些测试……PS。仅提及
npm-pack
一项,就对这个答案进行了投票。谢谢你。PPS。在这方面,npm publish--dry run
也很有用。这显然解决了这个问题。最后,我从
bin
文件的路径名中删除了
/
,并将
文件
作为一个空数组留在了中(因为这似乎比创建
.npmignore
来排除我文件夹中的所有其他内容更经济)。谢谢你的帮助!
  "files": [
    "bin/cli.js",
    "src/index.js"
  ],