"npm run build" = "react-scripts: 权限被拒绝"

use*_*883 16 node.js npm jenkins reactjs

我正在尝试在 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"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

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

{
  "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"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

然后这样做:

nvm install node
nvm use node
nvm install --lts
nvm use --lts
Run Code Online (Sandbox Code Playgroud)

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

npm install -g
Run Code Online (Sandbox Code Playgroud)

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

chmod -R 777 node_modules
Run Code Online (Sandbox Code Playgroud)

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

chmod -R 777 /root/.nvm
Run Code Online (Sandbox Code Playgroud)

我可以得到它一次使用

npm run build
Run Code Online (Sandbox Code Playgroud)

但后来我从詹金斯运行了一个“立即构建”,但它失败了

curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
Run Code Online (Sandbox Code Playgroud)

然后,我cd/var/lib/jenkins/workspace/MedAverter/medaverter-front和运行

npm run build
Run Code Online (Sandbox Code Playgroud)

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

> 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
Run Code Online (Sandbox Code Playgroud)

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

Muh*_*man 39

解决方案1:

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

npm install react-scripts --save
Run Code Online (Sandbox Code Playgroud)

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

解决方案2:

试试这个命令

sudo chmod +x node_modules/.bin/react-scripts
Run Code Online (Sandbox Code Playgroud)

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

解决方案3;

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

sudo npm run build
Run Code Online (Sandbox Code Playgroud)

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

第1步:

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

which npm
Run Code Online (Sandbox Code Playgroud)

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

或者

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

which yarn
Run Code Online (Sandbox Code Playgroud)

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

第2步:

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

sudo chmod -R 777 /usr/local/bin/npm
Run Code Online (Sandbox Code Playgroud)


Chr*_*rry 28

适用于 macOS 的解决方案

从项目的根目录运行:

chmod +x node_modules/.bin/react-scripts
Run Code Online (Sandbox Code Playgroud)


ajs*_*ule 9

以下对我有用:

rm -rf node_modules 

npm install // or yarn install

npm start // or yarn start 

Run Code Online (Sandbox Code Playgroud)


小智 6

就我而言,它是在 npm run 上给出的。这就是我解决的方法。

  1. rm -rf /节点模块
  2. 尼普我
  3. npm 运行 Android


Tec*_*ext 5

不要使用文件中"start": "react-scripts start"指定的默认值,而是package.json尝试将其更改为以下内容,然后尝试:"scripts": { "start": "node ./node_modules/react-scripts/bin/react-scripts.js start" }


小智 5

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

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

sudo rm -rf node_modules
yarn
yarn start
Run Code Online (Sandbox Code Playgroud)


use*_*883 0

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

一个新错误是关于 jest-worker 的。我在 DigitalOcean 服务器上运行了以下命令来解决这个问题:

yarn add jest-worker
Run Code Online (Sandbox Code Playgroud)

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

jenkins ALL=(ALL) NOPASSWD:ALL
Run Code Online (Sandbox Code Playgroud)

然后修改 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'
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

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