声明:这是我在大学毕业后进入第二家互联网公司学习的内容
安装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
版权声明:
原创不易,洗文可耻。除非注明,本博文章均为原创,转载请以链接形式标明本文地址。