尝试使用监视方法时,节点FS模块引发ENOENT错误

时间:2018-09-08 16:55:50

标签: javascript node.js node-modules fs

我正在使用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" );

每当我尝试使用Node在终端中运行js文件时,都会收到错误

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 :(得分:1)

正如评论所指出的,您在绝对路径和相对路径以及节点如何处理当前工作目录方面遇到麻烦。

运行以下命令可以最好地说明问题的症结所在:

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

在后一种情况下,节点针对节点进程的当前工作目录解析相对路径。可以使用以下命令确认密码:

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。