在 nodemon js 或 npm 中观察新文件创建事件
Watch for new file creation events in nodemon js or npm
是否可以使用 nodemon js 或 npm 或任何其他包仅监视新文件创建事件?例如:在一个项目中,每次创建一个新文件时,某些其他脚本必须 运行 执行额外的任务,仅用于一次设置。
目前,每次文件更改时使用 nodemon 运行s 脚本设置的方式,但这会浪费资源 (CPU/Memory),因为设置是一次性的,而且只需要当创建新文件时。
希望这是有道理的,如果不是这里是一个简单的例子。
例如,每次创建一个新文件时,我们希望 运行 一个自动创建一些记录的脚本或 link 到该文件——这只需要完成一次。
替代方案:
如果在 nodemon 或 npm 包中不可能,是否有其他选择,例如直接使用 shell 脚本 (windows + linux) 或 python?
Python 是一个简单的方法!
使用watchdog
由 pip install watchdog
安装
试试这个脚本并修改 "on_created" 函数
做你想做的事。您可以使用 os.system("some script") 调用另一个脚本,或 subprocess.call(["node", "test.js"]).
import subprocess
import os
import sys
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class CustomHandler(FileSystemEventHandler):
"""Logs all the events captured."""
def on_moved(self, event):
super(CustomHandler, self).on_moved(event)
what = 'directory' if event.is_directory else 'file'
print("Moved {}: from {} to {}".format(what, event.src_path,
event.dest_path))
def on_created(self, event):
super(CustomHandler, self).on_created(event)
what = 'directory' if event.is_directory else 'file'
print("Created {}: {}".format(what, event.src_path))
def on_deleted(self, event):
super(CustomHandler, self).on_deleted(event)
what = 'directory' if event.is_directory else 'file'
print("Deleted {}: {}".format(what, event.src_path))
def on_modified(self, event):
super(CustomHandler, self).on_modified(event)
what = 'directory' if event.is_directory else 'file'
print("Modified {}: {}".format(what, event.src_path))
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = CustomHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
print("Watchdog started...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
希望这对您有所帮助:)
是否可以使用 nodemon js 或 npm 或任何其他包仅监视新文件创建事件?例如:在一个项目中,每次创建一个新文件时,某些其他脚本必须 运行 执行额外的任务,仅用于一次设置。
目前,每次文件更改时使用 nodemon 运行s 脚本设置的方式,但这会浪费资源 (CPU/Memory),因为设置是一次性的,而且只需要当创建新文件时。
希望这是有道理的,如果不是这里是一个简单的例子。
例如,每次创建一个新文件时,我们希望 运行 一个自动创建一些记录的脚本或 link 到该文件——这只需要完成一次。
替代方案: 如果在 nodemon 或 npm 包中不可能,是否有其他选择,例如直接使用 shell 脚本 (windows + linux) 或 python?
Python 是一个简单的方法!
使用watchdog
由 pip install watchdog
试试这个脚本并修改 "on_created" 函数 做你想做的事。您可以使用 os.system("some script") 调用另一个脚本,或 subprocess.call(["node", "test.js"]).
import subprocess
import os
import sys
import time
from watchdog.observers import Observer
from watchdog.events import FileSystemEventHandler
class CustomHandler(FileSystemEventHandler):
"""Logs all the events captured."""
def on_moved(self, event):
super(CustomHandler, self).on_moved(event)
what = 'directory' if event.is_directory else 'file'
print("Moved {}: from {} to {}".format(what, event.src_path,
event.dest_path))
def on_created(self, event):
super(CustomHandler, self).on_created(event)
what = 'directory' if event.is_directory else 'file'
print("Created {}: {}".format(what, event.src_path))
def on_deleted(self, event):
super(CustomHandler, self).on_deleted(event)
what = 'directory' if event.is_directory else 'file'
print("Deleted {}: {}".format(what, event.src_path))
def on_modified(self, event):
super(CustomHandler, self).on_modified(event)
what = 'directory' if event.is_directory else 'file'
print("Modified {}: {}".format(what, event.src_path))
if __name__ == "__main__":
path = sys.argv[1] if len(sys.argv) > 1 else '.'
event_handler = CustomHandler()
observer = Observer()
observer.schedule(event_handler, path, recursive=False)
observer.start()
print("Watchdog started...")
try:
while True:
time.sleep(1)
except KeyboardInterrupt:
observer.stop()
observer.join()
希望这对您有所帮助:)