Как "npm" запускает "npm test"?

Я всегда думал, что команда npm test просто запускает то, что я написал бы в package.json внутри scripts: { test:...} раздел scripts: { test:...}. Но у меня есть эта странная ошибка, когда она не работает.

Итак, у меня есть этот кусок конфигурации в package.json

"scripts": {
  "start": "node index.js",
  "test": "mocha tests/spec.js"
}

Когда я пытаюсь запустить тесты, я npm test в терминале и получаю такую ошибку:

module.js:340
    throw err;
          ^
Error: Cannot find module 'commander'

Но все в порядке, когда я mocha tests/spec.js только mocha tests/spec.js Есть идеи, почему это?

ОБНОВИТЬ:

Я попытался установить Commander, и у меня возникла ошибка. Не могу найти модуль 'glob'. После установки glob у меня

Ошибка: не удается найти модуль '../'**

Но на самом деле вопрос в том, почему у меня есть эти ошибки и почему все нормально при запуске mocha tests/spec.js?

Ответы

Ответ 1

У вас может быть установлено две версии mocha: одна глобально (npm install -g mocha) и одна локально, которая, похоже, не работает.

Когда вы запускаете скрипт через npm, либо как npm run-script <name> либо с помощью определенного ярлыка, такого как npm test или npm start, ваш текущий каталог bin каталога пакетов находится в npm start вашего пути. Для вашего пакета, который, вероятно, ./node_modules/.bin/, который содержит ссылку на пакет mocha исполняемый скрипт.

Вероятно, вы можете исправить это, удалив локальный mocha и переустановив его с помощью --save-dev:

rm -rf node_modules/mocha
npm install --save-dev mocha

Это должно дать вам рабочую локальную копию mocha со всеми установленными зависимостями (commander и т.д.).