“ npm run build” =“反应脚本:权限被拒绝”

时间:2020-06-01 20:12:14

标签: node.js reactjs jenkins npm

我正在尝试在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

但是我从詹金斯那里运行了一个“ Build Now”,它以相同的方式失败了

[[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

我花了数天时间试图解决这个问题。有建议吗?

8 个答案:

答案 0 :(得分:13)

解决方案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”这种类型的路径

OR

如果您使用的是 yarn ,则

检查 yarn 的路径

which yarn

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

步骤2:

授予该路径777的权限,并尝试运行项目

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

答案 1 :(得分:2)

代替您的"start": "react-scripts start"文件中指定的默认package.json,请尝试将其更改为以下内容,然后尝试:"scripts": { "start": "node ./node_modules/react-scripts/bin/react-scripts.js start" }

答案 2 :(得分:1)

似乎您没有正确的权限来构建或执行react应用,

您可以尝试使用将所有者更改为当前用户

   sudo chown -R username:username /var/lib/jenkins/workspace/MedAverter/medaverter-front/

您可以通过在终端中键入whoami来检查您的用户名,因为当前用户默认无权访问var文件夹或其中的任何内容,所以可以完成此操作。此外,您想更改访问模式以使用

为每个人读取和执行
 sudo chmod 755 /var/lib/jenkins/workspace/MedAverter/medaverter-front/

然后您可以使用

更改为root用户
sudo su

然后使用

构建应用
npm run build

当我遇到类似的问题时,这对我有用,希望对您也一样,干杯:)

答案 3 :(得分:1)

我终于找到了解决这个问题的方法。花了几天的时间。首先,我删除了Jenkins项目,并使用Pipeline而不是Freestyle创建了一个新项目。然后,我添加了带有脚本的Jenkinsfile。仍然失败,但是现在我可以灵活地添加其他命令来处理错误。

一个新的错误是关于玩笑的工人。我在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 Droplet的内存从1GB增加到2GB,以克服另一个错误。如果有人知道更好的方法来克服令人沮丧的权限错误,请发表评论。

答案 4 :(得分:0)

从项目的根目录输入chmod +x node_modules/.bin/react-scripts

答案 5 :(得分:0)

我之前已经修改了文件夹的权限,并撤消了更改。我相信就是这样。

我刚刚删除了node_modules文件夹,并使用yarn命令重新安装了依赖项。

sudo rm -rf node_modules
yarn
yarn start

答案 6 :(得分:0)

发生这种情况是因为缺少 package.json 文件 只需运行此命令即可解决问题:

npm audit fix

答案 7 :(得分:0)

有时 npm 需要 root 权限。尝试在命令中使用 sudo。它为我解决了类似的问题。这可能会有所帮助。

sudo npm run build