В доступе отказано при запуске модуля fs-plus - PullRequest
0 голосов
/ 14 декабря 2018

Я пишу пакет для Редактор Atom .

Может кто-нибудь помочь с ошибкой persmission denied, которую я получаю при использовании метода fs-plus makeTree вмой пакет при запуске на Mac?Нет ошибок в Windows.Я использую fs-plus, тот же модуль, который использует Atom в своем пакете tree-view (и tree-view работает на Mac).

UPD: добавление скриншота и некоторого кода:

When I say Atom uses tree-view plugin and it works I mean this:

Новая опция папки, показанная на рисунке, реализована с использованием того же модуля -FS-плюс, и это работает на Mac.Я использую тот же модуль и тот же метод (fs-plus.makeTree) для создания каталога, но моя реализация завершается неудачно с Permission denied error.

Мой код:

import util from 'util';
import { sep } from 'path';
import fs from 'fs-plus';


const makeTreeAsync = util.promisify(fs.makeTree);
createTutorial(data) {
    const { initialPath } = this;
    const { fileName } = data;
    const filePath = `${initialPath}${sep}${fileName}${sep}${fileName}.md`;

    return makeTreeAsync(fileName)
      .then(() => writeFileAsync(filePath, this.getContent(data)))
      .then(() => filePath);
  },

codeиз пакета в виде дерева:

path = require 'path'
fs = require 'fs-plus'
 onConfirm: (newPath) ->
    newPath = newPath.replace(/\s+$/, '') # Remove trailing whitespace
    endsWithDirectorySeparator = newPath[newPath.length - 1] is path.sep
    unless path.isAbsolute(newPath)
      // some path preprocessing

    return unless newPath

    try
      if fs.existsSync(newPath)
        @showError("'#{newPath}' already exists.")
      else if @isCreatingFile
        // some code, we are not interested in as we 're creating directory
      else
        fs.makeTreeSync(newPath)
        @emitter.emit('did-create-directory', newPath)
        @cancel()
    catch error
      @showError("#{error.message}.")

Важное примечание: мой пакет устанавливается вручную (копируется в ~/<username>/.atom/packages), а затем запускается npm i

1 Ответ

0 голосов
/ 17 декабря 2018

После некоторого времени отладки у меня есть решение.Я безуспешно пытался использовать нативный fs.mkdir, но после добавления режима в качестве второго аргумента - это сработало.

const _0777 = parseInt('0777', 8);
const mode = _0777 & (~process.umask());

fs.mkdir(<folderPath>, mode, () => {});

Надеюсь, это кому-нибудь поможет.

...