2016-03-12 3 views
0

Im пытается скомпилировать папку файлов разметки в один PDF с markdown-pdf пакет NPM.Недопустимая операция Nodejs в каталоге

У меня есть простой скрипт, чтобы сделать работу:

var mpdf = require('markdown-pdf'); 
var fs = require('fs'); 

var mDocs = fs.readdirSync('./understandinges6/manuscript/'); 
mDocs = mDocs.map(function(d) { return 'understandinges6/manuscript/' + d }); 

var Book = 'understandinges6.pdf'; 

mpdf().concat.from(mDocs).to(Book, function() { 
    console.log("Created", Book); 
}); 

Но когда я выполнить сценарий, появляется эта ошибка:

events.js:154 
     throw er; // Unhandled 'error' event 
    ^

Error: EISDIR: illegal operation on a directory, read 
    at Error (native) 

Это странно, потому что я нахожусь в своей домашней папке с соответствующие разрешения. Я указываю выходную папку/файл в скрипте и просто читаю с помощью fs.readdirSync.

Есть идеи по этому вопросу?

+0

Ну не ошибка EISDIR очевидна? Я требую один или несколько файлов в mDocs IS DIR (это каталог, а не файл) try 'console.log (mDocs);' для проверки – Molda

+0

mDocs возвращает правильный массив: [здесь находится фрагмент] (https: // gitlab.com/snippets/16400) – Nano

+0

Видя, что ваш ответ означает, что массив неправильный? Итак, был каталог, поэтому я был прав, не так ли? И хотя ваш docs.pop() работает, он не является надежным, поскольку, если папка не была последней в массиве, она не сработает. Лучше было бы использовать docs.filter, чтобы отфильтровать все без расширения md. – Molda

ответ

0

mDocs = mDocs.map(function(d) { return 'understandinges6/manuscript/' + d }); вы забыли добавить «./». Перепишите в mDocs = mDocs.map(function(d) { return './understandinges6/manuscript/' + d });

+0

Нет, это не проблема. Все еще искажает ошибку. – Nano

0

Круто, я получаю эту проблему здесь:

В папке manuscripts/images/ являются подпапка с некоторым PNG-х. Когда скрипты пытались прочитать и преобразовать images/ от .md до .pdf, ошибка была упущена.

Вот массив с изображениями/внутри:

[ 'understandinges6/manuscript/00-Introduction.md', 
    'understandinges6/manuscript/01-Block-Bindings.md', 
    'understandinges6/manuscript/02-Strings-and-Regular-Expressions.md', 
    'understandinges6/manuscript/03-Functions.md', 
    'understandinges6/manuscript/04-Objects.md', 
    'understandinges6/manuscript/05-Destructuring.md', 
    'understandinges6/manuscript/06-Symbols.md', 
    'understandinges6/manuscript/07-Sets-And-Maps.md', 
    'understandinges6/manuscript/08-Iterators-And-Generators.md', 
    'understandinges6/manuscript/09-Classes.md', 
    'understandinges6/manuscript/10-Arrays.md', 
    'understandinges6/manuscript/11-Promises.md', 
    'understandinges6/manuscript/12-Proxies-and-Reflection.md', 
    'understandinges6/manuscript/13-Modules.md', 
    'understandinges6/manuscript/A-Other-Changes.md', 
    'understandinges6/manuscript/B-ECMAScript-7.md', 
    'understandinges6/manuscript/Book.txt', 
    'understandinges6/manuscript/images' ] 

решение? Просто pop()mDocs массив (теперь только docs):

var mpdf = require('markdown-pdf'); 
var fs = require('fs'); 

var mDocs = fs.readdirSync('understandinges6/manuscript/'); 
var docs = mDocs.map(function(d) { return 'understandinges6/manuscript/' + d }); 

docs.pop(); 

var Book = 'understandinges6.pdf'; 

mpdf().concat.from(docs).to(Book, function() { 
    console.log("Created", Book); 
}); 
Смежные вопросы