2017-01-14 3 views
3

Я использую npm as a build tool и поэтому в моем package.json, и некоторые из моих скриптов зависит от других сценариев:package.json скрипты, которые работают с npm и пряжей?

{ 
    "test": "npm run lint && mocha" 
} 

Это жёстко менеджер npm пакетов в package.json. Как сделать такой подход для выражения зависимостей работать как с npm, так и с yarn?

ответ

5

$npm_execpath переменная среды относится к инструменту сборки, так что просто заменить npm с $npm_execpath:

{ 
    "test": "$npm_execpath run lint && mocha" 
} 

Оба npm test и yarn test будет работать, и будет использовать соответствующий инструмент сборки.

+1

Это работало отлично для меня, пока мне не пришлось работать на компьютере под управлением Windows. Где я получаю ошибку '' $ npm_execpath 'не распознается как внутренняя или внешняя команда' Кто-нибудь знает, как заставить это работать в Windows? Я немного незнаю, когда дело доходит до этой операционной системы. – rgb

+0

@rgb У вас может быть не повезло на Windows, я не знаю, как там все работает. – mjs

+0

Если '$ npm_execpath' содержит пробелы, все может сломаться, если вы не окружите переменную двойными кавычками. Например, '" test ":" \ "$ npm_execpath \" запустить lint && mocha "' –

1

Хотя ответ MJS' велик, есть также небольшой пакет, который якобы работает на всех средах, включая Windows: https://www.npmjs.com/package/yarpm

Для использования в проекте, запустить yarn add yarpm --dev/npm i -D yarpm, а затем просто использовать yarpm в сценариях как это:

{ 
    "test": "yarpm run lint && mocha" 
} 

Как пакет README заметок, вам просто нужно, чтобы убедиться, что ваши команды будут подходить для прохождения через к либо пряжи или НМП, вы не можете использовать аргументы/флаги, которые работают только на одном пакете менеджер.