"npm run build" = "react-scripts: Permission denied"

新手上路,请多包涵

我正在尝试在 Ubuntu 18.04 上部署我的工作 Windows 10 Spring-Boot/React 应用程序,但尽管多次尝试修复,但仍然收到“react-scripts: Permission denied”错误。希望你们中的一位反应专家能够发现我做错了什么。

我的 package.json 看起来像这样

{
  "name": "medaverter-front",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^4.2.4",
    "@testing-library/react": "^9.3.2",
    "@testing-library/user-event": "^7.1.2",
    "axios": "^0.19.2",
    "bootstrap": "^4.4.1",
    "react": "^16.13.0",
    "react-dom": "^16.13.0",
    "react-router-dom": "^5.1.2",
    "react-scripts": "3.4.0",
    "react-table-6": "^6.11.0",
    "react-validation": "^3.0.7",
    "reactstrap": "^6.5.0",
    "validator": "^12.2.0"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": "react-app"
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

我以 root 身份登录并使用 nvm 安装 node 和 lts。我像这样安装了nvm:

 curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash

然后这样做:

 nvm install node
nvm use node
nvm install --lts
nvm use --lts

然后我 cd/var/lib/jenkins/workspace/MedAverter/medaverter-front 并安装 node_modules 像这样:

 npm install -g

然后递归地将权限更改为 777,如下所示:

 chmod -R 777 node_modules

我还递归地将所有 /root/.nvm 权限更改为 777,如下所示:

 chmod -R 777 /root/.nvm

我可以使用它构建一次

npm run build

但随后我从 Jenkins 运行“立即构建”,但同样失败

> [[1;34mINFO[m] Running 'npm run build' in /var/lib/jenkins/workspace/MedAverter/medaverter-front
> [[1;34mINFO[m] [[1;34mINFO[m] > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front
> [[1;34mINFO[m] > react-scripts build [[1;34mINFO[m]
> [[1;31mERROR[m] sh: 1: **react-scripts: Permission denied**
> [[1;31mERROR[m] npm ERR! code ELIFECYCLE
> [[1;31mERROR[m] npm ERR! errno 126
> [[1;31mERROR[m] npm ERR! medaverter-front@0.1.0 build: `react-scripts build`
> [[1;31mERROR[m] npm ERR! Exit status 126
>
> ```

然后我 `cd` 到 `/var/lib/jenkins/workspace/MedAverter/medaverter-front` 并运行

npm run build

”`

并且再次得到同样的错误:

 > root@ubuntu-s-1vcpu-1gb-nyc1-01:/var/lib/jenkins/workspace/MedAverter/medaverter-front#
> npm run build
>
> > medaverter-front@0.1.0 build /var/lib/jenkins/workspace/MedAverter/medaverter-front
> > react-scripts build
>
> sh: 1: **react-scripts: Permission denied** npm ERR! code ELIFECYCLE
> npm ERR! errno 126 npm ERR! medaverter-front@0.1.0 build:
> `react-scripts build` npm ERR! Exit status 126

我确实花了几天时间试图弄清楚这一点。建议?

原文由 user3217883 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.5k
2 个回答

我终于想出了解决这个问题的办法。花了好几天的功夫。首先,我删除了 Jenkins 项目并使用 Pipeline 而不是 Freestyle 创建了一个新项目。然后我添加了一个带有脚本的 Jenkinsfile。这继续失败,但现在我可以灵活地添加额外的命令来处理错误。

一个新错误是关于 jest-worker 的。我在 DigitalOcean 服务器上运行了以下命令以通过该命令:

 yarn add jest-worker

然后我又遇到了旧的权限错误。我认为所有这些权限错误都是由于用户 jenkins 试图运行用户 root 拥有的东西,即使一切都有 777 权限。我不明白,但这就是我解决它的方法。修改 /etc/sudoers 文件并添加以下行:

 jenkins ALL=(ALL) NOPASSWD:ALL

然后修改 Jenkins 文件脚本以包含递归 chmod 和 chown。这是最终工作的完整脚本:

 pipeline {
    agent any
    stages {
        stage('Checkout') {
            steps {
                echo 'Checkout...'
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                checkout scm
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'sudo chown -R jenkins /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                stash 'sources'
            }
        }
        stage('Build') {
            steps {
                echo 'Build...'
                unstash 'sources'
                sh 'sudo chmod -R 777 /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'sudo chown -R jenkins /var/lib/jenkins/workspace/MedAverter/medaverter-front'
                sh 'mvn clean package -DskipTests'
                stash 'sources'
            }
        }
    }
}

我还必须将 DigitalOcean 液滴的内存从 1GB 增加到 2GB 以克服另一个错误。如果有人知道克服令人沮丧的权限错误的更好方法,请发表评论。

原文由 user3217883 发布,翻译遵循 CC BY-SA 4.0 许可协议

解决方案 1:

我认为你已经全局安装了 react-script。所以试试这个命令

npm install react-scripts --save

然后再次运行该应用程序。

解决方案 2:

试试这个命令

sudo chmod +x node_modules/.bin/react-scripts

然后再次运行该应用程序。

解决方案3;

我认为你的 npm 没有权限。你可以尝试通过 sudo 运行

sudo npm run build

你可以像这样解决这个问题

步骤1:

如果您使用 npm ,请检查 npm 的路径

which npm

你将“/usr/local/bin/npm”这种类型的路径

要么

如果您使用的是 纱线,请检查 纱线 的路径

which yarn

你将“/usr/local/bin/npm”这种类型的路径

第2步:

授予此路径 777 权限并尝试运行项目

sudo chmod -R 777 /usr/local/bin/npm

原文由 Muhammad Numan 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题