Rails Webpacker:rails-erb-loader无法解析.html.erb

时间:2018-04-06 17:59:42

标签: ruby-on-rails webpack erb webpacker

我尝试使用rails-erb-loader。

在我的home.component.ts

import templateString from './home.component.html';

我有一个home.component.html.erb

<div class="row">...</div>

我还有一个由rake webpacker生成的app / javascript / packs / hello_erb.js.erb:install:erb

我收到以下错误:

ERROR in ./app/javascript/packs/hello_erb.js.erb
Module build failed: Error: rails-erb-loader failed with code: 1

我猜这是加载ruby bin的配置错误,我想我可以解决这个问题,我的真正问题是以下错误:

ERROR in ./app/javascript/hello_angular/app/home/home.component.html.erb
Module parse failed: Unexpected token (1:0)

直接转发我的配置:

配置/的WebPack /装载机/ erb.js

module.exports = {
  test: /\.erb$/,
  enforce: 'pre',
  exclude: /node_modules/,
  use: [{
    loader: 'rails-erb-loader',
    options: {
      runner: (/^win/.test(process.platform) ? 'ruby ' : '') + 'bin/rails runner'
    }
  }]
}

配置/的WebPack / environment.js

const { environment } = require('@rails/webpacker')

const typescript =  require('./loaders/typescript')
environment.loaders.append('typescript', typescript)

const html = require('./loaders/html')
environment.loaders.append('html', html)

const erb =  require('./loaders/erb')
environment.loaders.append('erb', erb)

module.exports = environment

我在config / webpacker.yml

中启用了.erb扩展名

我的直觉是我的.html.erb由于某种原因被解析为javascript ...我不知道为什么。

我没有成功地深入研究webpackerrails_erb_loader问题。 有什么想法吗?

顺便说一句,我看到了类似的问题: Webpacker in Rails Project using angular cannot import .html.erb and .css from external template

4 个答案:

答案 0 :(得分:1)

此外,如果执行:

,webpacker会提供erb加载程序

rails webpacker:install:erb

答案 1 :(得分:0)

好的,所以最后这很简单......

我创建了一个加载器定义html_erb.js

module.exports = {
  test: /\.html.erb$/,
  loader: [
    'rails-erb-loader',
    'html-loader'
  ]
};

就是这样,它在经典的erb加载器之前捕获并将输出转换为html ... 这就是我所希望的rails-erb-loader在盒子里做得好但是......

无论如何,它有效:D

答案 2 :(得分:0)

我有一个类似的错误,并通过在config / webpacker.rb中添加以下内容进行了修复:

default:
  extensions:
    - .js.erb # first array entry

在config / webpacker / environments.js中用append替换erb的prepend

environment.loaders.prepend('erb', erb)

答案 3 :(得分:0)

希望这对将来的人有所帮助:由于我们的Ruby错误并且无法编译,因此出现了此错误。

尝试了所有配置,深入了Webpack(er)内部。最后,我们的erb文件中的变量名输入错误。