Модуль Node FS выдает ошибку ENOENT при попытке использовать метод Watch - PullRequest
0 голосов
/ 08 сентября 2018

Я использую macOS 10.13.4 и версию Node 8.11.4. Я пытаюсь следовать простому руководству tutsplus.com под названием Node From Scratch Второе видео начинается с того, что требуется модуль FS , а затем вызывается метод watch для файла, чтобы отслеживать изменения в файле.

'use strict';

const fs = require( 'fs' );

fs.watch( 'stylesheet.css', () => console.log( 'File Has Been Updated' ) );

console.log( "Application Has Started And Is Listening For Changes" );

Всякий раз, когда я пытаюсь запустить файл js в терминале, используя Node, я получаю ошибку

fs.js:1384
throw error;
^
Error: watch stylesheet.css ENOENT
at _errnoException (util.js:992:11)
at FSWatcher.start (fs.js:1382:19)
at Object.fs.watch (fs.js:1408:11)
at Object.<anonymous> (/Downloads/filewatcher.js:5:4)
at Module._compile (module.js:652:30)
at Object.Module._extensions..js (module.js:663:10)
at Module.load (module.js:565:32)
at tryModuleLoad (module.js:505:12)
at Function.Module._load (module.js:497:3)
at Function.Module.runMain (module.js:693:10)

Не могу найти в Интернете ничего о том, почему это происходит. Может кто-нибудь, пожалуйста, помогите.

1 Ответ

0 голосов
/ 09 сентября 2018

Как отмечалось в комментариях, у вас проблемы с абсолютными и относительными путями и тем, как узел обрабатывает текущий рабочий каталог.

Суть вашей проблемы лучше всего продемонстрировать, выполнив следующее:

const path = require('path');
console.log(path.resolve('foo'));
console.log(path.resolve('./foo'));

В последнем случае узел разрешает относительный путь относительно текущего рабочего каталога процесса узла. CWD может быть подтвержден с помощью:

console.log(process.cwd());

CWD процесса узла определяется с того места, где вы вызываете узел.

Например, если у вас следующая файловая структура:

/
└──projects/
   └──app/
      ├──js/
      │  └──dep.js
      ├──index.js
      └──test.txt

index.js содержимое:

const fs = require('fs');
console.log(process.cwd());
console.log(fs.readFileSync('./test.txt'));
require('./js/dep.js');

dep.js содержимое:

const fs = require('fs');
console.log(process.cwd());
console.log(fs.readFileSync('./test.txt'));

Если вы перешли на /projects/app и запустили node index.js, вы увидите, что программа успешно распечатывает cwd и содержимое test.txt дважды. Это демонстрирует, как cwd согласован для разных исходных файлов, используемых программой.

Если вы перешли на /app и запустили node app/index.js, вы увидите сбой программы с ошибкой ENOENT. Это демонстрирует, как запуск вашей программы из разных мест меняет cwd.

...