Pull to refresh

Comments 17

Дело, в том, что redrun разворачивает лишь те скрипты, которые расписаны в package.json.
Для того, что бы ощутить результат в полной мере, необходимы небольшие изменения:


{
   "test:full:speed": "redrun test:compile test:full:test test:full:cover test:removeTmpDir",
   "test:full:test": "node test-tmp/test/dev/test.js",
   "test:full:cover": "$(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js",
   "test:removeTmpDir": "scripts/test-remove-tmp-dir"
}

В моем случае результаты получились немного другие:


coderaiser@cloudcmd:~/javascript-obfuscator$ time npm run test:full

real    3m46.539s
user    0m45.062s
sys     0m50.060s

coderaiser@cloudcmd:~/javascript-obfuscator$ time redrun test:full:speed
> scripts/test-compile && node test-tmp/test/dev/test.js && $(npm bin)/istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js && scripts/test-remove-tmp-dir

real    3m8.401s
user    0m39.272s
sys     0m44.236s

А с такими скриптами, будет еще быстрее.


{
   "test:full:speed:max": "redrun test:compile test:full:test test:full:cover:speed test:removeTmpDir",
   "test:full:test": "node test-tmp/test/dev/test.js",
   "test:full:cover:speed": "istanbul cover $(npm bin)/_mocha -- test-tmp/test/index.spec.js",
   "test:removeTmpDir": "scripts/test-remove-tmp-dir"
}

coderaiser@cloudcmd:~/javascript-obfuscator$ time redrun test:full:speed:max

real    2m58.866s
user    0m37.000s
sys     0m42.692s

Чем больше npm-скриптов — тем выше скорость.

Спасибо огромное за статью и redrun! Отличная вещь с одним маленьким, но досадным минусом – zsh подсказывает мне доступные npm-скрипты, чего не делает с redrun.

Действительно, этого не хватает. Нужно будет подумать об этом.

И еще, похоже у вас не работают встроенные переменные npm'a. То есть, у меня такой скрипт:
"docker": "docker push registry.docker.com/myapp:v$npm_package_version"

выполняется, но вместо переменной пустота.

В redrun v5.5.0 добавлена поддержка автодополнения названий скриптов по табу аналогичную той, что используется в npm. Для установки достаточно выполнить:


redrun-completion >> ~/.bashrc
redrun-completion >> ~/.zshrc
Не понимаю, что такого крутого делает redrun, чего не делают другие сборщики. Мне даже кажется, что в данном случае make будет лучше, чем redurn, потому что самому make на линуксах ничего устанавливать не надо, он там и так стоит, а рэдран надо.
Просто конфиги свои берёт не из специального файла, а из package.json, который по идее должен быть в node-проектах. Да, умно брать конфиги от туда, эта идея хороша, но не нова.

Я хочу попросить сравнить скорость redrun и make, если не затруднит, сделайте пожалуйста.
Мне даже кажется, что в данном случае make будет лучше, чем redurn, потому что самому make на линуксах ничего устанавливать не надо, он там и так стоит, а рэдран надо.

Make есть на линуксах, но не на Windows.


Просто конфиги свои берёт не из специального файла, а из package.json, который по идее должен быть в node-проектах. Да, умно брать конфиги от туда, эта идея хороша, но не нова.

Не свои конфиги, а конфиги npm. Redrun в этом плане совместим с npm, и ничего нового не привносит.


Я хочу попросить сравнить скорость redrun и make, если не затруднит, сделайте пожалуйста.

У redrun и make разные цели. Redrun разворачивает npm-скрипты, и запускает получившуюся команду. Make автоматизирует процесс преобразования файлов из одной формы в другую, у него свой формат, и возможности гораздо шире, чем у redrun, но в его штатную поставку не входит чтение и исполнение npm-скриптов, скорее он предлагает писать скрипты в Makefile. Этот подход не хуже, он может быть быстрее, но он кардинально отличается от используемого в redrun а именно: использование существующих скриптов, а не написание новых.


Я не владею make и мне не близка его философия, поэтому я не смогу сделать такое сравнение.

Вы сейчас сравниваете make и npm run. Redrun делает то же, что и npm, только значительно быстрее. Зачем нужен npm run, когда есть make – абсолютно другой вопрос, который не относится ни к рэдрану, ни к этому посту.
Вот этим вопросом и стоило бы задаться. Все сложные скрипты удобнее делать через Makefile, банально синтаксис лучше, чем shell команды экранированные в JSON, например какой-нибудь хитрый запуск тестов:

./node_modules/.bin/istanbul cover -x tests.js --dir=./build/coverage --report=lcov --hook-run-in-context ./node_modules/mocha/bin/_mocha -- --reporter spec tests.js

Согласитесь, длинно… В Makefile хотя бы на новые строки можно перенести.

Я лично использую NPM скрипты только если команды очень простые и короткие или если достоверно известно, что будут юзеры на винде.

Действительно очень длинно, такую команду в любом случае стоит упростить. Сделать это можно добавив пару секций в package.json:


{
  "config": {
    "mocha": "--reporter spec test",
    "istanbul": "-x test --dir=./build/coverage --report=lcov --hook-in-context",
  },
  "scripts": {
    "coverage" : "istanbul cover $npm_config_istanbul _mocha -- $npm_config_mocha"
  }
}

После чего скрипт можно запускать с помощью:


redrun coverage

либо


npm run coverage
Но это же ужас дикий ))) и запись у вас не полная — пути до istanbul и mocha потерялись. Это затыкание дырок, а не способ, увы. А вот нормальная запись:

./node_modules/.bin/istanbul \
    cover \
    -x tests.js \
    --dir=./build/coverage \
    --report=lcov \
    --hook-run-in-context \
    ./node_modules/mocha/bin/_mocha \
    -- \
    --reporter spec \
    tests.js

Я бы сильно поспорил про порог вхождения для gulp. Проблема в том, что устаревают не только плагины для gulp, но и все остальное без исключения, поэтому хотелось бы, чтобы авторы думали об обратной совместимости почаще. Redrun решает только частный случай быстрого запуска, который не всех беспокоит.

Redrun разворачивает секцию скриптов, за счет чего увеличивается скорость по сравнению с npm и npm-run-all. Этот частный случай интересует пользователей npm-скриптов, для которых важны: скорость, удобство и совместимость с существующими решениями — то о чем автор думает достаточно часто.

Sign up to leave a comment.

Articles