监视 nodemon js 或 npm 中的新文件创建事件

Posted

技术标签:

【中文标题】监视 nodemon js 或 npm 中的新文件创建事件【英文标题】:Watch for new file creation events in nodemon js or npm 【发布时间】:2020-09-30 21:05:17 【问题描述】:

是否可以使用 nodemon js 或 npm 或任何其他包仅监视新文件创建事件?例如:在一个项目中,每次创建一个新文件时,必须运行某些其他脚本来执行其他任务,仅用于一次设置。

目前,使用 nodemon 设置的方式在每次文件更改时都会运行脚本,但这会浪费资源(CPU/内存),因为设置是一次性的,只有在创建新文件时才需要。

如果不是这里,希望这是一个简单的例子。

例如,例如,每次创建新文件时,我们都希望运行一个脚本,该脚本会自动创建一些记录或指向该文件的链接——只需执行一次。

替代方案: 如果在 nodemon 或 npm 包中无法实现,是否有替代方法,例如直接使用 shell 脚本(windows + linux)或 python?

【问题讨论】:

npmjs.com/package/chokidar 【参考方案1】:

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 没有在 webpack-typescript-node.js 中监视目录?

Gulp Watch 和 Nodemon 冲突

npm脚本中的nodemon多次触发

Gulp-nodemon 和监视任务

Nodemon ts-node 无法监视 JavaScript 更改

Mac 上的 Node.js Heroku 部署 - sh: 1: nodemon: not found / npm ERR! `nodemon fileName.js`/npm 错误!在...启动脚