由于预发布,节点应用程序无法运行

时间:2014-12-23 17:56:12

标签: node.js npm node-serialport

即使安装成功,我也会收到无效的软件包安装。顺便说一句,这个问题与答案有关 - question about versioning

npm install serialport

这些是远在依赖树中的软件包。

npm ERR! invalid: readable-stream@1.0.27-1 /Users/snorre edwin/Code/raspberry-node-server/node_modules/serialport/node_modules/node-pre-gyp/node_modules/tar-pack/node_modules/readable-stream
npm ERR! invalid: string_decoder@0.10.25-1 /Users/snorre edwin/Code/raspberry-node-server/node_modules/serialport/node_modules/node-pre-gyp/node_modules/tar-pack/node_modules/readable-stream/node_modules/string_decoder

这最终导致我的浏览器出现此错误:

Uncaught TypeError: Cannot read property '_ansicursor' of undefined

有没有办法在这个npm问题中排序?我可以避免这些预发行套餐吗?

1 个答案:

答案 0 :(得分:0)

下面的github回答给了我很多关于npm的见解,我认为我必须在其他地方挖掘这个问题。但实际上,看起来串行端口不再适用于浏览器化。它曾经工作,因为我用了两个月,但有些事情发生了变化。当我大声说出来时,无论如何它听起来都很愚蠢。所以不要浏览serialport。

我收到了关于github的回复,issue answere,我想我会与其他可能想知道的人分享:

semver @ 4中处理预发行版本的变化是主要版本升级到npm @ 2的主要动机之一。 npm 2的所有版本都受此更改的影响,简而言之,确保在执行semver范围匹配时忽略版本字符串右侧的所有版本信息。当你从npm @ 1升级到npm @ 2时,看到运行npm -g ls时出现一些不规则现象是正常的,并且由于某些软件包是通过使用bundledDependencies以自包含安装的形式分发的,所以可能会出现与npm @ 2规则不一致的状态。

虽然这不会一直有效,但大多数情况下解决这些问题的最简单方法就是卸载并重新安装受影响的软件包。对于带有bundledDependencies的软件包,如果你真的想要清除所有内容,你可以进入node_modules文件夹,其中包含带有嘈杂的预发布依赖版本的软件包版本,并运行npm install problemDependency,它将使用最新版本该依赖项与该特定包的semver范围匹配。

Re:你的第二个问题,semver范围检查在语义上完成,而不是词法,所以1.0.31应该与npm @ 2匹配:

%semver -r' ~1.0.2' 1.0.26 1.0.27-1 1.0.31 1.0.26 1.0.31 我怀疑你看到的行为是由于包tar包中包含的bundledDependency。

所有这些都有记录,因此我将关闭此问题。我希望这能为你解决问题!