В немного более старом проекте мы используем драгоценный каменьautoprefixer-rails
(а не webpacker
). После обновления версии 10 в CI появились следующие ошибки:
ActionView::Template::Error: Autoprefixer doesn’t support Node v8.10.0. Update it.
Я не понимал, как это могло случиться. Мы используем NVM для автоматической установки и настройки версий узлов. Так что я ожидал, что это будет 10.22.1
вместо 8.10.0
.
Я обнаружил, чтоExecJS
автоматически определяет версию узла в системе. Вы можете запустить ExecJS::Runtimes.autodetect
в консоли Rails, чтобы увидеть, что он выбрал. Интересно, что это подсказало, что пошло не так:
irb(main):007:0> ExecJS::Runtimes.autodetect => #<ExecJS::ExternalRuntime:0x00000000037449d0 @name="Node.js (V8)", @command=["nodejs", "node"], @runner_path="/home/semaphore/[redacted]/vendor/bundle/ruby/2.7.0/gems/execjs-2.7.0/lib/execjs/support/node_runner.js", @encoding="UTF-8", @deprecated=false, @binary="nodejs", @popen_options={:external_encoding=>"UTF-8", :internal_encoding=>#<Encoding:UTF-8>}>
Порядок команд был для меня неправильным (@command=["nodejs", "node"]
):
semaphore@semaphore-vm:~/[redacted]$ nodejs -v v8.10.0 semaphore@semaphore-vm:~/[redacted]$ node -v v10.22.1
Переключение на главную ветку ExecJS
устранило проблему, так как здесь был изменен порядок: https://github.com/rails/execjs/commit/f6dc08c58ab4e1a467f64d471ee6e0127c2f14de
На самом деле я сделал вилку https://github.com/renuo/execjs/tree/v2.7.0-renuo, которая должна работать для NVM (но не стандартных установок linux).