如何修复“ Sprockets :: FileNotFound:找不到类型为'application / javascript'的文件'turbolinks'”

时间:2019-01-26 21:29:20

标签: ruby-on-rails webpack turbolinks

我无法将代码推送到heroku,但是它在本地运行。 当我在终端机上制作rake assets:precompile时,我得到以下答案: rake aborted! Sprockets::FileNotFound: couldn't find file 'turbolinks' with type 'application/javascript'我不想再使用链轮了

我尝试过:https://www.innoq.com/en/blog/rails-custom-elements-with-turbolinks-webpack/

但是当我做的时候:

class ApplicationController < ActionController::Base
  include Turbolinks::Redirection
  # ...
end

我收到来自错误控制台的错误uninitialized constant ApplicationController::Turbolinks

来自app / javascript / packs /

的我的application.js
import Turbolinks from 'turbolinks'
Turbolinks.start()

import '../css/application.scss'
import 'bootstrap'

我的package.json

{
  "name": "**********",
  "private": true,
  "dependencies": {
    "@rails/webpacker": "3.5",
    "bootstrap": "^4.2.1",
    "jquery": "^3.3.1",
    "popper.js": "^1.14.6",
    "turbolinks": "^5.2.0"
  },
  "devDependencies": {
    "webpack-dev-server": "2.11.2"
  },
  "version": "1.0.0",
  "main": "index.js",
  "repository": "git@github.com:******/*************.git",
  "author": "******* <******@email.com>",
  "license": "MIT"
}

我的宝石文件

source 'https://rubygems.org'
git_source(:github) { |repo| "https://github.com/#{repo}.git" }

ruby '2.6.0'

# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.2.2'
gem 'pg', '>= 0.18', '< 2.0'
gem 'puma', '~> 3.11'
gem 'webpacker'
gem 'jbuilder', '~> 2.5'
gem 'simple_form'
gem 'postmark-rails'
gem 'cloudinary'
gem 'dotenv-rails', groups: [:development, :test]
gem 'rails_admin'
gem 'turbolinks', require: false
gem 'bootsnap', '>= 1.1.0', require: false

group :development, :test do
  gem 'byebug', platforms: [:mri, :mingw, :x64_mingw]
end

group :development do
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '>= 3.0.5', '< 3.2'
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
  gem 'better_errors'
  gem 'binding_of_caller'
  gem 'letter_opener'
end

group :test do
  gem 'capybara', '>= 2.15'
  gem 'selenium-webdriver'
  gem 'chromedriver-helper'
end

我的来自app / config / webpack /

的webpacker.yml
default: &default
  source_path: app/javascript
  source_entry_path: packs
  public_output_path: packs
  cache_path: tmp/cache/webpacker

  # Additional paths webpack should lookup modules
  # ['app/assets', 'engine/foo/app/assets']
  resolved_paths: []

  # Reload manifest.json on all requests so we reload latest compiled packs
  cache_manifest: false

  extensions:
    - .js
    - .sass
    - .scss
    - .css
    - .module.sass
    - .module.scss
    - .module.css
    - .png
    - .svg
    - .gif
    - .jpeg
    - .jpg

development:
  <<: *default
  compile: true

  # Reference: https://webpack.js.org/configuration/dev-server/
  dev_server:
    https: false
    host: localhost
    port: 3035
    public: localhost:3035
    hmr: false
    # Inline should be set to true if using HMR
    inline: true
    overlay: true
    compress: true
    disable_host_check: true
    use_local_ip: false
    quiet: false
    headers:
      'Access-Control-Allow-Origin': '*'
    watch_options:
      ignored: /node_modules/


test:
  <<: *default
  compile: true

  # Compile test packs to a separate directory
  public_output_path: packs-test

production:
  <<: *default

  # Production depends on precompilation of packs prior to booting for performance.
  compile: false

  # Cache manifest.json for performance
  cache_manifest: true

我的来自application / views / layouts的application.html.erb

<%= javascript_pack_tag 'application', 'data-turbolinks-eval': false, defer: true %>
<%= stylesheet_pack_tag 'application', 'data-turbolinks-track': 'reload', defer: true %>

1 个答案:

答案 0 :(得分:0)

对我来说,问题出在application.js中。创建了全新的Ruby on Rails应用后,我的application.js标头看起来像这样:

之前

//= require turbolinks
//= require_tree .

// =需要turbolinks 似乎是造成此问题的原因,因为我从未安装过turbolinks或类似的东西。删除此行为我解决了这个问题:

之后

//= require_tree .