是否可以在 Rails 6 中使用 .js.erb 文件?

Is it possible to use .js.erb file in Rails 6?

我在 app/javascripts/custom/test.js.erb

中有以下内容
export function test(){
  alert('<%= 5 %>');
}

但是 ERB 没有解释。

是否可以在 Rails 6 中像这样使用 js.erb?

这是可能的,但您需要确保您的文件包含在资产管道中并且已加载到您的视图中。

我在 Rails 6.1 上测试了以下示例:

# in config/initializers/assets.rb
Rails.application.config.assets.precompile += %w[application.js]

# in app/views/layouts/application.html.erb
<%= javascript_include_tag 'application' %>

# in app/assets/javascripts/application.js
//= require_tree .

# in app/assets/javascripts/test.js.erb
alert('<%= 5 %>');

你也可以在 webpacker 中使用 js.erb,你需要安装一个新的包 rails-erb-loader 并且还需要配置 webpack 加载器。

不过不用担心,webpacker 提供了内置的 rake 命令来安装所需的包和配置 webpack 加载器。

使用:

bundle exec rails webpacker:install:erb

现在只需将 app/javascripts/custom/test.js.erb 导入到 app/javascript/packs/application.js(打包入口点文件)。一切就绪!

// app/javascript/packs/application.js

import Rails from "@rails/ujs"
import Turbolinks from "turbolinks"
import * as ActiveStorage from "@rails/activestorage"
import "channels"

Rails.start()
Turbolinks.start()
ActiveStorage.start()

import '../custom/test.js.erb';

参考文档:https://github.com/rails/webpacker/blob/v5.4.3/docs/integrations.md#erb