Centos7安装Nodejs-v12.6.0


声明:这是我在大学毕业后进入第二家互联网公司学习的内容


安装Nodejs

Nodejs官网下载

Nodejs列表

cd /opt
wget https://nodejs.org/dist/v12.6.0/node-v12.6.0-linux-x64.tar.gz
tar -zxvf node-v12.6.0-linux-x64.tar.gz
mv node-v12.6.0-linux-x64 nodejs
ln -s /opt/nodejs/bin/npm /usr/local/bin/
ln -s /opt/nodejs/bin/node /usr/local/bin/

# 查看安装的版本
[root@localhost]# node -v
v12.6.0
[root@localhost]# npm -v 
6.9.0

nodejs install报错

执行npm istall 命令时,出现了npm ERR! cb() never called!错误

解决方案:清除npm缓存

npm ERR! cb() never called!

打包出现node_modules/node-sass/vendor文件夹permission denied权限不足的问题

node-sass@4.13.1 install /starlab/www/cloudtest/node_modules/node-sass
> node scripts/install.js

Unable to save binary /starlab/www/cloudtest/node_modules/node-sass/vendor/linux-x64-64 : { Error: EACCES: permission denied, mkdir '/starlab/www/cloudtest/node_modules/node-sass/vendor'
    at Object.mkdirSync (fs.js:757:3)
    at sync (/starlab/www/cloudtest/node_modules/mkdirp/index.js:71:13)
    at Function.sync (/starlab/www/cloudtest/node_modules/mkdirp/index.js:77:24)
    at checkAndDownloadBinary (/starlab/www/cloudtest/node_modules/node-sass/scripts/install.js:114:11)
    at Object.<anonymous> (/starlab/www/cloudtest/node_modules/node-sass/scripts/install.js:157:1)
    at Module._compile (internal/modules/cjs/loader.js:778:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
    at Module.load (internal/modules/cjs/loader.js:653:32)
    at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
    at Function.Module._load (internal/modules/cjs/loader.js:585:3)
  errno: -13,
  syscall: 'mkdir',
  code: 'EACCES',
  path: '/starlab/www/cloudtest/node_modules/node-sass/vendor' }

首先造成这个问题的原因是:
npm会有生命周期,某个包会有生命周期来执行一些东西,安全起见会自动降级导致没有权限执行一些操作,通过–unsafe-perm参数来解锁该限制。

npm lifecycle 命令在执行前,会判断配置unsafe-perm为true 时才继续,否则会提前退出。

 // lib/utils/lifecycle.js
    unsafe = unsafe || npm.config.get('unsafe-perm')
    if ((wd.indexOf(npm.dir) !== 0 || _incorrectWorkingDirectory(wd, pkg)) && !unsafe && pkg.scripts[stage]) {
      log.warn('lifecycle', logid(pkg, stage), 'cannot run in wd',
        '%s %s (wd=%s)', pkg._id, pkg.scripts[stage], wd
      )
      return cb()
    }

配置的读取顺序大致参考:npm-config,即cli -> env -> npmrc -> default。

default中关于unsafe-perm的初始化如下:

// lib/config/defaults.js
    'unsafe-perm': process.platform === 'win32' ||
                     process.platform === 'cygwin' ||
                     !(process.getuid && process.setuid &&
                       process.getgid && process.setgid) ||
                     process.getuid() !== 0

针对unix 平台,使用root 用户执行npm 命令时得到的默认值都会是false。

解决办法:

临时解决:npm install --unsafe-perm

永久解决:npm config set unsafe-perm true

参考资料

node-sass安装失败的问题 stack Error: EACCES: permission denied, mkdir


版权声明:

原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值