azure - 即使使用 sudo,Yeoman 也会给出权限错误
问题描述
我按照本教程安装了 Yeoman 和 Azure 的生成器。
因此,当我这样做时:sudo yo azuresfcontainer
,它给了我以下错误:
/usr/local/lib/node_modules/yo/node_modules/fast-glob/out/providers/reader-sync.js:45
throw err;
^
Error: EACCES: permission denied, scandir '/usr/lib/ssl/private'
at Object.fs.readdirSync (fs.js:875:3)
at exports.readdir (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/sync/fs.js:18:20)
at Object.safeCall [as safe] (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/call.js:24:8)
at DirectoryReader.readNextDirectory (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js:78:10)
at Readable.DirectoryReader.stream._read (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js:57:18)
at Readable.read (_stream_readable.js:455:10)
at readdirSync (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/sync/index.js:27:21)
at Function.readdirSyncStat (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/index.js:34:10)
at ReaderSync.dynamicApi (/usr/local/lib/node_modules/yo/node_modules/fast-glob/out/providers/reader-sync.js:61:24)
at ReaderSync.api (/usr/local/lib/node_modules/yo/node_modules/fast-glob/out/providers/reader-sync.js:53:25)
Emitted 'error' event at:
at DirectoryReader.emit (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js:365:14)
at call.safe (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/directory-reader.js:81:14)
at onceWrapper (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/call.js:45:17)
at onceWrapper (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/call.js:45:17)
at exports.readdir (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/sync/fs.js:22:5)
at Object.safeCall [as safe] (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/call.js:24:8)
[... lines matching original stack trace ...]
at readdirSync (/usr/local/lib/node_modules/yo/node_modules/@mrmlnc/readdir-enhanced/lib/sync/index.js:27:21)
我哪里做错了?
解决方案
我不认为你做错了什么,它看起来像是对 yeoman 的依赖破坏了 yeoman。这是 yeoman-environment 依赖项,此问题已打开:https ://github.com/yeoman/environment/issues/97复制粘贴以下问题:
运行 yo 时出现以下错误: Error: EACCES: permission denied, scandir '/usr/sbin/authserver (MacOS / High Sierra)
罪魁祸首在这里:
// Adds support for generator resolving when yeoman-generator has been linked if (process.argv[1]) { paths.push(path.join(path.dirname(process.argv[1]), '../..')); }
在 getNpmPaths() 中。我的 yo 位于 /usr/local/bin/yo,这会将整个 /usr 目录添加到搜索路径 => 如果某些目录不是用户可读的,resolver.findsGeneratorIn 中的 globby.sync 将抛出。
这样的事情解决了这个问题:
try { modules = modules.concat(globby.sync( ['generator-*', '@*/generator-*'], {cwd: root, onlyFiles: false, absolute: true} )); } catch(err) { debug( 'Could not access %s (%s)', root, err); }
我可以通过将全局包安装到不同的文件夹来解决这个问题。 https://docs.npmjs.com/getting-started/fixing-npm-permissions
为了最大限度地减少权限错误的可能性,您可以将 npm 配置为使用不同的目录。在此示例中,它将是您的主文件夹中的隐藏目录。
在开始之前备份您的计算机。
为全局安装创建一个目录:
mkdir ~/.npm-global
配置 npm 以使用新的目录路径:
npm config set prefix '~/.npm-global'
打开或创建一个 ~/.profile 文件并添加以下行:
export PATH=~/.npm-global/bin:$PATH
返回命令行,更新系统变量:
source ~/.profile
测试:在不使用 sudo 的情况下全局下载一个包。
npm install -g jshint
除了步骤 2-4,您可以使用相应的 ENV 变量(例如,如果您不想修改 ~/.profile):
NPM_CONFIG_PREFIX=~/.npm-global
推荐阅读
- excel - EXCEL:如何将来自两个不同列的值合并到不同工作表上的一个新列中
- javascript - 创建自定义工具提示数据 C3 饼图
- reactjs - 如何处理 ComponentDidUpdate 中的异步数据?
- haskell - 用警卫替换 where case
- php - 在尝试更改 woocommerce 面包屑时尝试获取非对象错误的属性“名称”
- javascript - 注意:请求尚未完成
- python - 检查列表是否包含多个字符中的任何一个
- python - Python从字典列表中提取键的值
- java - 如何有效地删除字符串中的连续相同字符
- cryptography - 我无法修复的重复出现的 freqtrade bot 错误