Yeoman дает разрешение на ошибку даже с sudo - PullRequest
0 голосов
/ 14 мая 2018

Я следовал этому учебнику и установил 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)

Где я ошибся?

1 Ответ

0 голосов
/ 14 мая 2018

Я не думаю, что вы сделали что-то не так, похоже, что зависимость от йомана сломала йомана.Это зависимость от среды yeoman и эта проблема была открыта: https://github.com/yeoman/environment/issues/97 Скопируйте и вставьте нижеприведенную проблему:

Во время выполнения yo возникает следующая ошибка: Ошибка: EACCES: разрешение запрещено, scandir '/ usr / sbin / authserver (MacOS / High Sierra)

Culprit здесь:

  // 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 в путь поиска => globby.sync внутри resolver.findsGeneratorIn сгенерирует, если некоторые каталоги недоступны для чтения пользователем.

Примерно так решается проблема:

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
...