Подтвердить что ты не робот

Настройте node npm package.json, чтобы "npm test" работал как в unix, так и в windows

Я разработал модуль node.js npm, разрабатываемый под Windows. Сегодня я написал несколько тестов Mocha. После многих проблем казалось, что для работы npm test package.json должен выглядеть следующим образом: (могут быть и другие варианты???)

"scripts": { "test": "node node_modules/mocha/bin/mocha" }

вместо того, что во всех книгах, основанных на Unix,

"scripts": { "test": "./node_modules/.bin/mocha" }

Как я могу установить package.json для работы как с Windows, так и с Unix? Я предполагаю, что Travis-CI запускает Unix, поэтому, если мне нужно связать сборку с ней, она взорвется версией Windows.

Я нашел двухлетний поток, где кто-то запросил функцию для этого. Эта нить, казалось, вымерла. Этот вопрос SO > кажется близким, но это не совсем то, что я хочу, и, честно говоря, я не могу понять ответ.:-( Кто-нибудь может уточнить?

Пока я иду

"scripts": {
      "test": "node node_modules/mocha/bin/mocha",
      "testOnUnixUseThis"    : "./node_modules/.bin/mocha (I think)",
      "testOnWindowsUseThis" : "node node_modules/mocha/bin/mocha"
  },

К сожалению, вы не можете пойти npm test testOnWindowsUseThis или npm testOnWindowsUseThis. И это не устраняет проблему Трэвиса-CI. Но, по крайней мере, человек, который загружает модуль, может (надеюсь) увидеть, что происходит.

Любые лучшие идеи? Я единственный человек, который все еще развивается под Windows???: -)

4b9b3361

Ответ 1

Я всегда мог npm install -g mocha или npm install mocha, а затем просто добавить

"scripts": {
    "test": "mocha spec"
}

to package.json. Это может работать или не работать в среде EVERY. Я знаю, например, с lineman, вы должны использовать bin/mocha. Кроме того, если вы не найдете пути вокруг этого, установите тестовый script для Unix, а затем добавьте второй script, называемый "wintest", или что-то, что делает все, что вам нужно, чтобы сделать это в Windows. Вы можете называть свои скрипты так, как хотите. По умолчанию (test, start и т.д.) Можно использовать с npm [command]; любые нестандартные (например, wintest) могут использоваться с npm run-script [command], и они все равно будут работать.

Небольшая история о том, как/почему это работает:

Когда вы устанавливаете модуль по всему миру, он доступен в PATH (или независимо от эквивалента Windows). Когда вы устанавливаете зависимость проекта, если в этом модуле есть какие-либо двоичные файлы, они привязаны к символу node_modules/.bin, а при запуске npm run [some-command] npm помогает добавить node_modules/.bin в PATH для этой команды. Поэтому, когда mocha установлен глобально "test": "mocha spec", вы используете ваш мокко, установленный во всем мире, для запуска тестов. Когда он зависит от проекта, он использует один в node_modules/.bin. Тот, который я нашел с этим, - это то, что npm добавляет node_modules/.bin в начало PATH, поэтому локальные двоичные файлы всегда будут иметь приоритет над глобальными. Почти все время это то, что вы хотите, но это стоит того, чтобы знать, как это работает (у меня недавно была ошибка, связанная с этим).

EDIT:

Не знаю, в какой момент в истории npm это изменилось, но теперь npm run <script-name> работает (больше не нужно делать npm run-script <script-name>). Возможно, run-script все еще работает. Я бы этого ожидал, но я не пробовал.

Ответ 2

Как я могу установить package.json для работы как с Windows, так и с Unix?

Если вы

  • использовать Windows
  • dislike -g global install

... это рабочее решение

"scripts": {
  "test": "node node_modules/mocha/bin/mocha.js"
},

Примечания

  • put node впереди не наносит вреда и может помочь в Windows (расширение .js не обязательно регистрируется в исполняемом файле nodejus, если вы его не установили). Может открыть текстовый редактор, идеал или (что еще хуже) скриптовый хост, Internet Explorer...)
  • Адресация script напрямую избавляет вас от необходимости глобальной установки. (Не судить, если это хорошая практика).
  • передние косые черты помогают работать под Linux (очевидно). И избегайте ловушки окон: обратные косые черты, если они используются, должны быть удвоены (поскольку они интерпретируются как избегающие следующей буквы, если используются одиночные).

Ответ 3

Не используйте глобальное решение, я предлагаю вам следить за тем, что ребята Mocha сказать:

"scripts": {  
    "test": "node_modules/.bin/mocha -w"
 },

Ответ 4

Используйте npm i mocha --save-dev

Это сохранит модуль как зависимость от разработки, и npm автоматически настроит исполняемые файлы, которые будут использоваться в объекте scripts. Если вы хотите использовать исполняемые файлы вне сценариев, определенных в package.json, вы также можете установить его на глобальном уровне, хотя обратите внимание, что в конечном итоге вы можете использовать разные версии пакета.

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