"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 错误!运行 `npm ci && npm run build` 时出现 SyntaxError 后的代码 1`