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

Posted

技术标签:

【中文标题】"npm run build" = "react-scripts: Permission denied"【英文标题】: 【发布时间】:2020-09-20 05:29:19 【问题描述】:

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

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

【问题讨论】:

检查你运行node的ubuntu用户权限 为什么要全局安装,然后在非全局目录node_modules中更改权限?您是否尝试删除-g?此外,您的 chmod 东西不是必需的,实际上非常危险。请不要那样做。权限被拒绝通常意味着未设置可执行标志,或者它被认为是另一个用户,并且除了用户/组之外的任何人都没有设置这些位。不过,您安装模块的方式非常奇怪。 是的,我最初在没有 -g 的情况下尝试过,但无法让它工作。添加了 -g 稍后尝试不同的解决方案。我知道最终的解决方案不应该涉及设置 777 权限,但我只是想让一些东西起作用,然后在真正的解决方案被揭示后回到正确的方式。你知道那是什么吗? 我在使用 sudo 安装 npm 和 nvm 时遇到了类似的问题。卸载并使用常规用户权限重新安装后,为我修复了它。 【参考方案1】:

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

如果您正在使用 yarn by

,请检查 yarn 的路径
which yarn

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

第 2 步:

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

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

【讨论】:

root@ubuntu-s-1vcpu-1gb-nyc1-01:~# which npm /root/.npm-global/bin/npm chmod -R 777 .npm-global 我也做了同样的事情对于纱线,但仍然出现同样的错误。 @user3217883 试试这个 npm install react-scripts --save 然后再次运行应用程序 @user3217883 我已经更新了我的答案。您可以尝试解决方案1和解决方案2 是的,有效!现在我将尝试 Jenkins 的“立即构建”,看看它是否能继续工作。 谢谢,我尝试了解决方案 2,它成功了。【参考方案2】:

从项目的根目录运行:

chmod +x node_modules/.bin/react-scripts

【讨论】:

这项工作适合我 @SaurabhChavan 很高兴听到这个消息!【参考方案3】:

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

【讨论】:

试过了,但得到了同样的错误。进行更改后是否需要关闭 PuTTY 会话并开始新的会话?【参考方案4】:

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

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

sudo rm -rf node_modules
yarn
yarn start

【讨论】:

【参考方案5】:

您似乎没有构建或执行 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

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

【讨论】:

感谢您的帖子。直到我发布了我的解决方案之后,我才看到它。 DigitalOcean 服务器上只有一个用户,即 root。 su不是和root一样吗? Isn't su the same as root? 不一定,没有附加参数,是的:su 将转移到 root user.su 实际上是系统(具有 root 权限)但由于 root 具有大多数权限,它应该可以工作首先,由于服务器使用www-data作为默认用户,所以www-data可以访问服务器的任何东西都可以访问,你可以简单地将username替换为www-data并跳过第三条命令,它应该是都好。无论如何,您似乎已经解决了,干杯:)【参考方案6】:

我终于找到了解决这个问题的办法。花了好几天的功夫。首先,我删除了 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 droplet 的内存从 1GB 增加到 2GB 以克服另一个错误。如果有人知道克服令人沮丧的权限错误的更好方法,请发表评论。

【讨论】:

【参考方案7】:

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

npm audit fix

【讨论】:

【参考方案8】:

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

sudo npm run build

【讨论】:

到处使用“sudo”安全吗?

以上是关于"npm run build" = "react-scripts: Permission denied"的主要内容,如果未能解决你的问题,请参考以下文章

为啥“npm run build”会产生错误“react-scripts Permission denied”?

使用 Github Actions 发布 React+dotnet 核心应用程序抛出错误 MSB3073: The command "npm run build" exited w

运行“npm run build”需要啥?

`npm 错误!运行 `npm ci && npm run build` 时出现 SyntaxError 后的代码 1`

(转载)vue项目npm run dev 发生了啥?

我在 Windows 上收到“npm run build”部署错误 [重复]