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)
但后来我从詹金斯运行了一个“立即构建”,但它失败了
Run Code Online (Sandbox Code Playgroud)curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.0/install.sh | bash
然后,我cd要/var/lib/jenkins/workspace/MedAverter/medaverter-front和运行
npm run build
Run Code Online (Sandbox Code Playgroud)
并且再次得到同样的错误:
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
我真的花了几天的时间试图弄清楚这一点。建议?
Muh*_*man 39
我认为您已经全局安装了 react-script。所以试试这个命令
npm install react-scripts --save
Run Code Online (Sandbox Code Playgroud)
然后再次运行该应用程序。
试试这个命令
sudo chmod +x node_modules/.bin/react-scripts
Run Code Online (Sandbox Code Playgroud)
然后再次运行该应用程序。
我认为你的npm没有权限。你可以尝试通过 sudo 运行
sudo npm run build
Run Code Online (Sandbox Code Playgroud)
你可以像这样解决这个问题
如果您正在使用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”这种类型的路径
授予此路径的权限 777 并尝试运行项目
sudo chmod -R 777 /usr/local/bin/npm
Run Code Online (Sandbox Code Playgroud)
Chr*_*rry 28
chmod +x node_modules/.bin/react-scripts
Run Code Online (Sandbox Code Playgroud)
以下对我有用:
rm -rf node_modules
npm install // or yarn install
npm start // or yarn start
Run Code Online (Sandbox Code Playgroud)
不要使用文件中"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)
我终于找到了解决这个问题的方法。花了好几天的努力。首先,我删除了 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,才能避免另一个错误。如果有人知道更好的方法来克服令人沮丧的权限错误,请发表评论。
| 归档时间: |
|
| 查看次数: |
21804 次 |
| 最近记录: |