为什么我不能更新npm软件包依赖关系?

时间:2019-05-05 05:02:03

标签: node.js npm package.json package-lock.json

我已经完成了npm审核,并显示我有一个高漏洞。那就是它给我的信息:

┌───────────────┬─────────────────────────────────────────────────┐
│ High          │ Arbitrary File Overwrite                        │
├───────────────┼─────────────────────────────────────────────────┤
│ Package       │ tar                                             │
├───────────────┼─────────────────────────────────────────────────┤
│ Patched in    │ >=4.4.2                                         │
├───────────────┼─────────────────────────────────────────────────┤
│ Dependency of │ node-sass-chokidar                              │
├───────────────┼─────────────────────────────────────────────────┤
│ Path          │ node-sass-chokidar > node-sass > node-gyp > tar │
├───────────────┼─────────────────────────────────────────────────┤
│ More info     │ https://npmjs.com/advisories/803                |
└───────────────┴─────────────────────────────────────────────────┘

我查看了node-gyp软件包的package-lock.json,发现tar软件包的版本仍为2.0.0,但是我需要4.4.8:

"node-gyp": {
    "version": "3.8.0",
    "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-3.8.0.tgz",
    "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==",
    "requires": {
        "fstream": "^1.0.0",
        "glob": "^7.0.3",
        "graceful-fs": "^4.1.2",
        "mkdirp": "^0.5.0",
        "nopt": "2 || 3",
        "npmlog": "0 || 1 || 2 || 3 || 4",
        "osenv": "0",
        "request": "^2.87.0",
        "rimraf": "2",
        "semver": "~5.3.0",
        "tar": "^2.0.0",
        "which": "1"
    },
    "dependencies": {
        "nopt": {
            "version": "3.0.6",
            "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz",
            "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=",
            "requires": {
                "abbrev": "1"
            }
        },
        "semver": {
            "version": "5.3.0",
            "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
            "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8="
        },
        "tar": {
            "version": "2.2.1",
            "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
            "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
            "requires": {
                "block-stream": "*",
                "fstream": "^1.0.2",
                "inherits": "2"
            }
        }
    }
}

然后我搜索了相同的问题,因此找到了answer。然后我做到了

npm cache verify
rm -rf node_modules/
npm i -g npm npm-check-updates
ncu -g
ncu -u
npm i

,但是tar软件包的版本仍然保持不变。我还尝试使用npm install tar@4.4.8直接更新它,但只是将tar放在我的package.json中。我也尝试过npm update和npm过时了。一切看起来都是最新的。

2 个答案:

答案 0 :(得分:1)

好吧,由于某种原因,它称为package-lock.json,该版本将始终保持不变。

如果要更新软件包,则需要删除该文件,或将其重命名为package.json,然后执行更新。

答案 1 :(得分:1)

node-gyp@3.8.0取决于"tar@^2.0.0,将tar更新为4.4.8不会影响node-gyp

this answer中所述,漏洞报告应通过健全性检查,并带有一丝盐味。如果嵌套的程序包存在漏洞,则所有依赖于此程序包的程序包都应更新,这可能很复杂。另一方面,如果以不引起安全问题的方式使用易受攻击的程序包,则不是漏洞。

node-sass-chokidar是开发包,tar的嵌套依赖关系不太可能导致项目的安全问题。报告的“漏洞”无法轻松修复。忽略报告。如果还没有问题(实际上是there is),请在node-sassnode-sass-chokidar存储库中打开它。