【问题标题】:How to load javascript file from rails plugin如何从rails插件加载javascript文件
【发布时间】:2023-03-18 12:17:01
【问题描述】:

我正在尝试创建一个插件,该插件应该公开一个 javascript 文件,但我无法将它加载到我的 rails 5 应用程序中。

在我的 gem 中,我尝试将名为 my_gem.js 的 javascript 文件添加到

  • vendor/assets/javascripts
  • app/assets/javascripts
  • lib/<gem-name>/assets/javascripts

但它们都不起作用。我只是在我的application.js中加载文件时收到此错误消息

couldn't find file 'my_gem' with type 'application/javascript'

这就是我将插件/gem 加载到我的 rails 项目中的方式

gem "my-gem", path: "~/projects/my-gem"

【问题讨论】:

    标签: ruby-on-rails asset-pipeline ruby-on-rails-5


    【解决方案1】:

    我们有created a gem which utilizes assets before

    您需要在 gem 目录树中创建一个 app/assets/javascripts/my_gem 文件夹,您将在其中放置您的 my_gem.js 文件。

    最重要的是,you need to add this file to the asset path(我们使用引擎):

    #lib/my_gem.rb
    module MyGem
       class Gem < Rails::Engine
          config.assets.precompile += %w(my_gem/my_gem.js) 
       end
    end
    

    这将允许文件单独使用,或作为应用程序的一部分:

    #app/assets/javascripts/application.js
    //= require my_gem/my_gem
    

    【讨论】:

    • 谢谢!几乎正确。将config.assets.precompile += %w(gem/file.js) 添加到engine.rb 会公开file.js 文件,这意味着应该使用//= require file,而不是//= require gem/file
    【解决方案2】:

    你必须告诉 Rails 编译 my_gem.js。您可以在初始化程序、application.rb 或环境文件中执行此操作。

      Rails.application.config.assets.precompile += ["my_gem.js"]
    

    我建议将源文件保存在~/projects/my-gem/app/assets/javascripts/my_gem.js

    【讨论】:

    • 我投了赞成票,尽管上面的代码需要在 gem 中,而不是在应用程序中;)
    • 初始化器可以在 gem 中
    • 当然可以;我认为你的回答在这一点上是模棱两可的
    • 这里是关于在你的 gem 中添加一个初始化器的信息(假设它是一个 Rails 引擎)link
    • 啊,好的。感谢您的澄清
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    相关资源
    最近更新 更多