Вопрос:
Я использовал для запуска различных команд через Makefile, но для nodejs-проектов package.json – более подходящее место для этого материала.
Запуск команд через npm работает отлично, но очень медленно по сравнению с выполнением команды.
$ time ./node_modules/.bin/jshint . && ./node_modules/.bin/jscs . real 0m0.759s user 0m0.524s sys 0m0.085s No code style errors found. $ time npm run lint > @ lint /path/to/project > jshint . && jscs . No code style errors found. real 0m2.246s user 0m1.637s sys 0m0.277s
Можно ли ускорить его?
обновление. My package.json:
{ «devDependencies»: { «jscs»: «^1.12.0», «jshint»: «^2.6.3» }, «scripts»: { «lint»: «jshint . && jscs .» } }
upd2. Я измерил время не так. Гант указал на это в своем комментарии. Теперь оба раза выглядят одинаково (разница в 100 мс).
$ time sh -c ‘./node_modules/.bin/jshint . && ./node_modules/.bin/jscs .’ No code style errors found. real 0m1.704s user 0m1.245s sys 0m0.177s $ time npm run lint > @ lint /path/to/project > jshint . && jscs . No code style errors found. real 0m1.822s user 0m1.621s sys 0m0.198s Лучший ответ:
Это не ошибка npm, на самом деле она даже более точно определяет время.
Посмотрите, что вы сделали.
time npm run lint будет вызывать время, которое затем будет приводить ваши задачи в порядок. time перестанет принимать время, необходимое для завершения работы npm, которое будет выполняться при выполнении ваших задач. Здесь есть только небольшие накладные расходы, а script работает по назначению.
time ./node_modules/.bin/jshint . && ./node_modules/.bin/jscs . однако вызовет time, который будет вызывать jshint. Как только jshint завершает работу, время тоже прекратится, а jscs будет работать без. Вот почему в ваших примерах порядок выходов смешивается.
Чтобы получить точные измерения времени без npm, попробуйте time sh -c ‘./node_modules/.bin/jshint . && ./node_modules/.bin/jscs .’