Metalsmith.js: Как собрать в тот же каталог, что и скрипт сборки?

Я совершенно новичок в металлургии. Я следовал этому руководству: http://www.robinthrift.com/post/metalsmith-part-1-setting-up-the-forge/

Я хочу создать свой сайт в корневом каталоге моего проекта (тот же каталог, что и скрипт сборки). Я хочу сделать это, потому что хочу, чтобы страницы github хорошо с ним взаимодействовали. Но когда я пытаюсь построить, я получаю эту ошибку: Ошибка: EBUSY, ресурс занят или заблокирован

Вот моя структура каталога:

  • project_folder/
    • _site-src/
      • index.html
    • node_modules
    • build.js
    • пакет.json

Вот мой исходник build.js:

var Metalsmith = require("metalsmith");

Metalsmith(__dirname)
    .source("_site_src")
    .destination(".")
    .build();

Как я хочу, чтобы мой проект выглядел так:

  • project_folder/
    • _site-src/
      • index.html
    • node_modules
    • build.js
    • пакет.json
    • index.html

Я не знаю, что я делаю неправильно. Я ценю любую помощь.


person Kyle Paulsen    schedule 25.08.2014    source источник
comment
У меня нет машины, на которой я мог бы проверить это, но я предполагаю, что вы пытаетесь перезаписать файлы, из которых читаете. Попробуйте изменить его на .destination("\..")?   -  person James Khoury    schedule 03.09.2014
comment
Помимо того, что для того, чтобы сделать то, что, как я думаю, вы имеете в виду, вам нужен двойной \, это не сработало. Я старался \.., \\.., .., ., /.., /. и все они потерпели неудачу. Я только что использовал скрипт сборки grunt, который копирует файлы из каталога сборки в текущий каталог, однако я не считаю это ответом на этот вопрос, потому что это просто смешно.   -  person Kyle Paulsen    schedule 05.09.2014
comment
Я согласен, что это не решение. Я бы сказал обходной путь. Вы пытались изменить параметр по умолчанию clean на false?   -  person James Khoury    schedule 05.09.2014
comment
Джеймс – Вот и все. Это решило это! Как ты это понял? Я чувствую, что это должно быть где-то на виду в какой-то документации. Если вы превратите это в ответ, я отмечу это как решение.   -  person Kyle Paulsen    schedule 17.09.2014
comment
Это была чистая спекуляция.   -  person James Khoury    schedule 18.09.2014


Ответы (1)


Сообщение об ошибке:

Ошибка: EBUSY, ресурс занят или заблокирован

кажется, файл заблокирован/используется ошибка. (Я не знаком с ошибками Node.js)

Я предполагаю, что это происходит, когда Metalsmith пытается очистить папку сборки (которая является вашей папкой решения, т.е. действительно плохой идеей). Это включено по умолчанию, но его можно отключить.

Чтобы отключить это, используйте:

.clean(false)

прежде чем строить.


НО если вы удалите элементы из исходной папки, они не будут удалены из папки сборки. Возможно, вы сможете справиться с этим с помощью специального сценария очистки или плагина.

У меня нет опыта работы со страницами github, но я думаю, что должна быть лучшая альтернатива, чтобы избежать проблемы.

Возможно, вы могли бы добавить символическую ссылку на папку сборки из папки проекта для файла index.html.

person James Khoury    schedule 18.09.2014
comment
Вы можете использовать git subtree, чтобы страницы github обслуживали подкаталог в качестве корня. Если ваш каталог сборки называется build, то: git subtree push --prefix build origin gh-pages - person poshaughnessy; 11.06.2016
comment
Git не имеет ничего общего с этим вопросом или ответом. - person James Khoury; 12.06.2016
comment
Да, это так. Вопрос был задан, потому что он хочет, чтобы страницы github хорошо с ним взаимодействовали. Вы ответили: у меня нет опыта работы со страницами github, но я думаю, что должна быть лучшая альтернатива, чтобы избежать проблемы. И я говорю, что лучшая альтернатива, позволяющая избежать этой проблемы, — заставить Github Pages обслуживать определенный подкаталог. - person poshaughnessy; 13.06.2016
comment
@poshaughnessy А, теперь я это вижу. Тем не менее, если вы думаете, что это ответ, опубликуйте его. Ваш комментарий не имеет смысла в связи с этим ответом, поскольку он касается стороны metalsmith.js. - person James Khoury; 14.06.2016