VSCode не будет работать с файловыми наблюдателями

Я запускаю эту команду для просмотра файлов .scss node-sass-chokidar ./scss -o ./build --watch

Если я редактирую файл в notepad++, все работает нормально, и файл компилируется.

Если я редактирую его в VSCode, то после сохранения выдает эту ошибку:

{
  "status": 3,
  "message": "File to read not found or unreadable: E:/Clients/conversions/css/scss/mobile.scss",
  "formatted": "Internal Error: File to read not found or unreadable: E:/Clients/conversions/css/scss/mobile.scss\n"
}

Я нашел несколько потоков, говорящих, что это вызвано атомарным сохранением, но разработчик VSCode говорит в потоке github, что VSCode не использует атомарное сохранение. Но затем в другом потоке он говорит, что переименовывает файлы, поэтому я думаю, что это может быть проблемой.

Кто-нибудь знает, как я могу это исправить и просто сохранить нормально?


person Guerrilla    schedule 17.05.2018    source источник


Ответы (5)


удалите флаг -w, а затем скомпилируйте его один раз, затем верните -w, теперь он будет работать

person user11942036    schedule 18.08.2019

Обновленный ответ

Я создал патч для ошибки просмотра node-sass при работе на vscode. Он доступен здесь: https://github.com/marcosbozzani/patch-node-sass-watch

Как пользоваться:

  1. Создайте папку с именем patches в своем проекте.
  2. Загрузите патч, чтобы папка вашего проекта patches
  3. Установите patch-package

Другой вариант — изменить node-sass на dart-sass:

npm uninstall node-sass
npm install sass

и обновите команду из

node-sass scss/ -o .build/ --watch

to

node-sass scss/:build/ --watch

Оригинальный ответ

У меня такая же проблема. Поэтому я создал для него патч и отправил запрос на включение в node-sass: https://github.com/sass/node-sass/pull/2386

Похоже, проблема в том, что VSCode все еще удерживает файл, пока node-sass пытается получить к нему доступ. Это исправление обнаруживает этот случай и применяет механизм повторных попыток.

Если вы хотите попробовать это сейчас, в качестве временной меры вы можете исправить локальную копию node-sass, заменив 'node_modules/node-sass/lib/render.js' этой версией: https://github.com/marcosbozzani/node-sass/blob/bug-vscode-watch/lib/render.js

Разница здесь: https://github.com/marcosbozzani/node-sass/commit/266861bf5761dcafd5d53d123264b965c861887c#diff-a485abf5b8f49de7f313d7799df3faf4

person Marcos    schedule 18.05.2018
comment
node-sass scss/:build/ --watch необходимо изменить на sass scss/:build/ --watch Поскольку вы устанавливаете sass (node-sass устарел), вы должны внести это изменение, чтобы оно заработало. - person iheathers; 26.12.2020

если вы используете node-sass в качестве компилятора и vscode или возвышенного текста, AFAIK, проблема связана с параметром атомарного сохранения, когда node-sass не может иметь доступ для переноса файла scss, потому что редактор все еще занят им. Два способа исправить это включают в себя:

  1. Замените файл render.js node-sass

проверьте здесь есть недостаток в необходимости делать это каждый раз вы устанавливаете node-sass

  1. Вместо этого установите модуль sass

    $ пряжа добавить -D sass

сценарий

$ sass --watch input.scss output.css

проверьте здесь, чтобы узнать больше о sass

person oyeyipowale    schedule 02.03.2020

Когда я испытал это, я нажимал «Сохранить» 3-4 раза, первые несколько раз получал такие ошибки, но в конце концов это сработало.

person Tran Anh Minh    schedule 26.07.2020

Здесь, используя node-sass: 5.0.0, я тоже столкнулся с этой проблемой.

Для меня решением было изменить команду скрипта:

node-sass sass/file.scss css/filecompiled.css --w

в

sass sass/file.scss css/filecompiled.css --watch

и сейчас все работает отлично.

"Compiled sass\file.scss to css\filecompiled.css."
person willianfrancas    schedule 20.12.2020
comment
это должно быть -w или --watch. Я думаю, проблема в том, что вы использовали две дефисы с w - person Guerrilla; 21.12.2020