2013-11-16 2 views
25

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

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

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

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

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

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

В настоящее время, я иду

"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. И это не решает проблему Travis-CI. Но, по крайней мере, человек, который загружает модуль может (я надеюсь) увидеть, что происходит.

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

ответ

35

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

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

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

Немного назад история о том, как/почему это работает:

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

EDIT:

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

+0

+1 Это работает в Windows, и это чертовски много проще, чем другие альтернативы, которые я видел или пытался. Не могу проверить в Unix прямо сейчас, но я буду вам доверять, что он работает. Если кто-нибудь еще не поставит лучший ответ в ближайшие пару дней, вы получите мою «чек». – user949300

+0

Просто зацепил все крючки Travis-ci, и это сработало отлично. Благодаря! – user949300

+0

На самом деле, просто «тест»: «Мокка» работает для меня на mac и linux. – Subfuzion

4

Использование npm i mocha --save-dev

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

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

9

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

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

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

Если вы

  • Использование Windows
  • нелюбовь -g глобальной установки

... это рабочий раствор,

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

Примечания:

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