npm часы с опцией --filter не работают - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь использовать npm watch для просмотра изменений в файле и запуска другого сценария в пакете. json файл .... но он не работает.

my Сценарий просмотра выглядит следующим образом:

"watch": "watch 'npm run start' './src' --filter='./testFilter.js'"

Файл testFilter. js выглядит следующим образом, для просмотра изменений только в файле testCode. js файл:

 var watch = require('watch');

 watch.watchTree('./src/', function (f, curr, prev) {
    if (typeof f == "file" && prev === null && curr === null) {
      return("testCode.js");
    } else if (prev === null) {
      return("testCode.js");
    }
    return("testCode.js");
  })

Когда Я запускаю npm watch, получая следующую ошибку.

/..../node_modules/watch/main.js:53
            if (options.filter && !options.filter(f, stat)) return done && callback(null, callback.files);
                                           ^

TypeError: options.filter is not a function
    at /.../node_modules/watch/main.js:53:44

Я думаю, что проблема в вышеуказанном файле testFilter. js ... не могли бы вы предоставить рабочий код для этого сценария? Я просто хочу посмотреть только один файл и запустить другой скрипт при изменении этого файла.

1 Ответ

0 голосов
/ 24 марта 2020

Документация пакета watch гласит:

'filter' - вы можете использовать эту опцию, чтобы предоставить функцию, которая возвращает true или false для каждого файла и каталога решить, будет ли этот файл / каталог включен в наблюдатель .

CLI USAGE:

    Usage: watch <command> […directory] [OPTIONS]


OPTION FILTER:

    --filter=<file>
        Path to a require-able .js file that exports a filter
        function to be passed to watchTreeOptions.filter.
        Path is resolved relative to process.cwd().

Пример:

Вот рабочий пример, он позволяет выполнить <command>, определенный для команды watch, в моем случае (npm run assets:renameJs) я хочу переименовать файл dist / original. js в dist / renamed. js только при изменении файла dist / original. js.

Это предотвращает al oop, поскольку без этого фильтра при каждом переименовании файла запускаются часы.

// ./package.json

…
“scripts”: {
    …
    "assets:renameJs": "mv dist/original.js dist/renamed.js || true",
    "myWatch": "watch \"npm run assets:renameJs\" ./dist --filter='npm-watch-myFilter.js'"
}
…
// ./npm-watch-myFilter.js

/**
 * @param  {string} f Filename
 * @param  {object} stat File System @see {@link http://nodejs.org/api/fs.html File System}
 */
const myFilter = (f, stat) => stat.isFile() && f === 'dist/original.js';

module.exports = myFilter;

Ссылки

...