为什么我不能更新 npm 包依赖?

Why I can't update npm package dependancy?

我完成了 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                |
└───────────────┴─────────────────────────────────────────────────┘

我查看了我的 package-lock.json for node-gyp package,我发现 tar package 仍然有 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 outdated。一切看起来都是最新的。

嗯,它被称为 package-lock.json 是有原因的,该版本将始终保持不变。

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

node-gyp@3.8.0 依赖于 "tar@^2.0.0,更新 tar 到 4.4.8 不会影响 node-gyp.

中所述,漏洞报告应该通过健全性检查并持保留态度。如果嵌套包有漏洞,所有依赖它的包都应该更新,这可能很复杂。另一方面,如果以不会导致安全问题的方式使用易受攻击的包,则它不是漏洞。

node-sass-chokidar是开发包,tar嵌套依赖不会给项目带来安全问题。报告的 'vulnerability' 无法轻易修复。忽略报告。如果还没有问题(实际上,there is),请在 node-sassnode-sass-chokidar 存储库中打开它。