Webpacker React.js 安装问题资产未在 Heroku 部署上编译

Webpacker React.js Setup Issue Assets not Compiling on Heroku Deploy

我不断收到以下错误代码,但我不知道如何解决这个问题。我真的不知道我应该如何配置 webpack 以 运行 在我的网站上做出反应,设置起来非常混乱。我尝试使用 https://github.com/shakacode/react_on_rails 上的指南,但我发现它对解决这个问题没有太大帮助。

/bin/webpack.rb

#!/usr/bin/env ruby
$stdout.sync = true

require "shellwords"
require "yaml"

ENV["RAILS_ENV"] ||= "development"
RAILS_ENV   = ENV["RAILS_ENV"]

ENV["NODE_ENV"] ||= RAILS_ENV
NODE_ENV    = ENV["NODE_ENV"]

APP_PATH               = File.expand_path("../", __dir__)
CONFIG_PATH            = File.join(APP_PATH, "config/webpack/paths.yml")

begin
  paths            = YAML.load(File.read(CONFIG_PATH))[NODE_ENV]

  NODE_MODULES_PATH   = File.join(APP_PATH.shellescape, paths["node_modules"])
  WEBPACK_CONFIG_PATH = File.join(APP_PATH.shellescape, paths["config"])
rescue Errno::ENOENT, NoMethodError
  puts "Configuration not found in config/webpack/paths.yml"
  puts "Please run bundle exec rails webpacker:install to install webpacker"
  exit!
end

WEBPACK_BIN    = "#{NODE_MODULES_PATH}/.bin/webpack"
WEBPACK_CONFIG = "#{WEBPACK_CONFIG_PATH}/#{NODE_ENV}.js"

newenv = { "NODE_PATH" => NODE_MODULES_PATH }
cmdline = [WEBPACK_BIN, "--config", WEBPACK_CONFIG] + ARGV

Dir.chdir(APP_PATH) do
  exec newenv, *cmdline
end

错误信息

remote:        Compiling webpacker assets 
remote:        ./bin/webpack:34:in `exec': No such file or directory - /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/node_modules/.bin/webpack (Errno::ENOENT)
remote:        from ./bin/webpack:34:in `block in <main>'
remote:        from ./bin/webpack:33:in `chdir'
remote:        from ./bin/webpack:33:in `<main>'
remote:        rake aborted!
remote:        JSON::ParserError: A JSON text must at least contain two octets!
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/gems/json-1.8.6/lib/json/common.rb:155:in `initialize'
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/gems/json-1.8.6/lib/json/common.rb:155:in `new'
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/gems/json-1.8.6/lib/json/common.rb:155:in `parse'
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/bundler/gems/webpacker-42db6f7806f2/lib/tasks/webpacker/compile.rake:14:in `block (2 levels) in <top (required)>'
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/bundler/gems/webpacker-42db6f7806f2/lib/tasks/webpacker/compile.rake:30:in `block in <top (required)>'
remote:        /tmp/build_5db4fafc0f5caa97d269dc06d8db2330/vendor/bundle/ruby/2.2.0/gems/rake-12.0.0/exe/rake:27:in `<top (required)>'
remote:        Tasks: TOP => webpacker:compile
remote:        (See full trace by running task with --trace)
remote:  !
remote:  !     Precompiling assets failed.
remote:  !

如果您使用的是 rails 5.1.0,那么本指南可能更合适。

https://github.com/rails/webpacker#heroku

原因是 react_on_rails 使用他们自己的名为 webpacker-lite 的 webpacker 分支,它以不同的方式处理许多资产。

这是我的:

#!/usr/bin/env ruby
$stdout.sync = true

require "shellwords"
require "yaml"

ENV["RAILS_ENV"] ||= "development"
RAILS_ENV = ENV["RAILS_ENV"]

ENV["NODE_ENV"] ||= RAILS_ENV
NODE_ENV = ENV["NODE_ENV"]

APP_PATH          = File.expand_path("../", __dir__)
NODE_MODULES_PATH = File.join(APP_PATH, "node_modules")
WEBPACK_CONFIG    = File.join(APP_PATH, "config/webpack/#{NODE_ENV}.js")

unless File.exist?(WEBPACK_CONFIG)
  puts "Webpack configuration not found."
  puts "Please run bundle exec rails webpacker:install to install webpacker"
  exit!
end

newenv  = { "NODE_PATH" => NODE_MODULES_PATH.shellescape }
cmdline = ["yarn", "run", "webpack", "--", "--config", WEBPACK_CONFIG] + ARGV

Dir.chdir(APP_PATH) do
  exec newenv, *cmdline
end