代码之家  ›  专栏  ›  技术社区  ›  Tomas Jansson

为什么NPM安装需要sudo来安装所有东西?

  •  0
  • Tomas Jansson  · 技术社区  · 5 年前

    我的回购中有一个奇怪的问题,昨天确实有效。当我跑步时 npm install 它继续进行,没有任何问题,但问题是并不是所有的软件包都安装好了。下缺少多个模块 node_modules/@types 我在packages.json中定义的。

    我还错过了一些应该添加到的文件 node_modules/bin ,就像nodemon。如果我跑步,它确实有效 sudo npm install 但这感觉不对。

    我确实将我的npm和节点版本更新到了最新的lts、npm 6.14.15和节点14.17.6。

    我的package.json看起来像:

    {
      "name": "blah",
      "version": "1.0.0",
      "description": "Blah blah blah",
      "author": "Tomas Jansson",
      "main": "./bin/index.js",
      "dependencies": {
        "@azure/arm-containerservice": "^13.3.0",
        "@azure/arm-subscriptions": "^3.1.0",
        "@azure/ms-rest-nodeauth": "^3.0.10",
        "@azure/msal-node": "^1.2.0",
        "@kubernetes/client-node": "^0.15.0",
        "@pulumi/azure-native": "^1.16.0",
        "@pulumi/azuread": "^4.3.0",
        "@pulumi/github": "^4.2.0",
        "@pulumi/kubernetes": "^3.5.1",
        "@pulumi/pulumi": "^3.7.0",
        "@pulumi/random": "^4.2.0",
        "@pulumi/tls": "^4.0.0",
        "cors": "^2.8.5",
        "dotenv": "^10.0.0",
        "express": "^4.17.1",
        "passport": "^0.4.1",
        "passport-azure-ad": "^4.3.0"
      },
      "devDependencies": {
        "@types/cors": "^2.8.12",
        "@types/express": "^4.17.13",
        "@types/node": "^16.3.2",
        "@types/passport-azure-ad": "^4.3.1",
        "nodemon": "^2.0.12",
        "ts-node": "^10.1.0",
        "typescript": "^4.3.5"
      },
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1",
        "build": "tsc",
        "start": "node ./bin/index.js",
        "watch": "nodemon ./index.ts"
      }
    }
    

    有什么想法为什么我需要使用sudo吗?

    2 回复  |  直到 5 年前
        1
  •  0
  •   Rob Elsner    5 年前

    听起来像是您的用户权限 node_modules 项目中的文件夹不匹配。

    解决此问题的一种可能方法是删除 节点模块 (使用sudo),然后运行 npm install 再一次您还应该验证您的用户是项目文件夹的所有者,以及 ls -l 显示你可以读+写。

    如果您使用Docker,可能会发生这种情况的一个常见原因是Docker容器中的用户可能是root用户,并且卷正在主机和容器之间进行映射。您可以更改COPY命令以包括用户:组,例如 COPY --chown=$USER_ID:$GROUP_ID app 并将这些作为构建参数传递给docker docker-compose build --build-arg USER_ID=$(id -u) --build-arg GROUP_ID=$(id -g)

        2
  •  -2
  •   ayden williams    5 年前

    因此,如果模块像(ffmpeg、nodemon或其他)一样是通常不在运行时运行的脚本,那么你需要使用sudo,但不是一直像使用axios一样,你不需要使用su多来安装,但如果有疑问,请使用sudo。