rails-view-loader
Version:
Rails view files (`.html.slim` , `.html.erb`, `.html.haml`) `webpack` loader.
172 lines (126 loc) • 4.7 kB
Markdown
# rails-view-loader
[](https://www.npmjs.com/package/rails-view-loader)
[](https://npm-stat.com/charts.html?package=rails-view-loader&from=2017-8-28)
[](http://standardjs.com/)
[](https://github.com/RichardLitt/standard-readme)
[](https://travis-ci.org/aptx4869/rails-view-loader)
[](https://coveralls.io/github/aptx4869/rails-view-loader)
[](http://opensource.org/licenses/MIT)
> Rails view files (`.html.slim` , `.html.erb`, `.html.haml`) `webpack` loader.
Transform Rails view template files to html.
Files are render using [`ApplicationController.render`](https://github.com/aptx4869/rails-view-loader/blob/master/lib/view_render.rb)
## Table of Contents
- [Install](#install)
- [Usage](#usage)
- [Configuration](#configuration)
- [Options](#options)
- [Dependencies](#dependencies)
- [ActionPack Variants](#actionpack-variants)
- [Contribute](#contribute)
- [License](#license)
## Install
### npm
```
npm install rails-view-loader --save-dev
```
### yarn
```
yarn add -D rails-view-loader
```
## Usage
Add `rails-view-loader` with your favourite html loaders (`html-loader`, `vue-html-loader`, etc) to your rules.
```js
// webpack.config.js
module.exports = {
resolve: {
modules: [ resolve('app/views'), ... ],
},
module: {
rules: [
{
test: /\.html\.(erb|slim|haml)$/,
use: [
'html-loader',
{
loader: 'rails-view-loader',
}
]
},
]
}
};
```
Now you can import your view files in your project, for example:
`app/view/session/new.html.erb`
```erb
<%# /* rails-view-loader-dependencies models/user */ %>
<h2>Login</h2>
<%= angular_form_for(User.new, url: login_path(:user)) do |f| %>
<%= f.input :login, required: true, autofocus: true %>
<%= f.input :password, required: true %>
<%= f.button :submit, "Login" %>
<% end %>
```
```js
import { Component } from '@angular/core'
import template from 'session/new.html.erb'
@Component({ selector: 'login', template: template })
export class LoginComponent {
}
```
## Configuration
### Options
Can be configured with [UseEntry#options](https://webpack.js.org/configuration/module/#useentry).
| Option | Default | Description |
| ------ | ------- | ----------- |
| `dependenciesRoot` | `"app"` | The root of your Rails project, relative to webpack's working directory. |
| `runner` | `"./bin/rails runner"` | Command to run Ruby scripts, relative to webpack's working directory. |
| `runnerOptions` | `{}` | [options](http://bit.ly/2wEBQnh) for child_process.execFile to call runner |
| `variant` | `null` | ActionPack Variants |
For example, if your webpack process is running in a subdirectory of your Rails project:
```js
{
loader: 'rails-view-loader',
options: {
runner: '../bin/rails runner',
dependenciesRoot: '../app',
}
}
```
### Dependencies
If your view files depend on files in your Rails project, you can list them explicitly.
Inclusion of the `rails-view-loader-dependency` (or `-dependencies`) comment
wrapped in `/* */` will tell webpack to watch these files -
causing webpack-dev-server to rebuild when they are changed.
#### Watch individual files
List dependencies in the comment. `.rb` extension is optional for ruby files.
```slim
/* rails-view-loader-dependencies ../config/config.yml models/user */
```
#### Watch a whole directory
To watch all files in a directory, end the path in a `/`.
```erb
<%# /* rails-view-loader-dependencies ../config/locales/ */ %>
```
### ActionPack Variants
You can set the [Action Pack Variants](http://guides.rubyonrails.org/4_1_release_notes.html#action-pack-variants) and layout with global config:
```js
{
loader: 'rails-view-loader',
options: {
runner: '../bin/rails runner',
dependenciesRoot: '../app',
variant: 'desktop',
layout: 'some-layout',
}
}
```
or with query string:
```js
import template from 'registration/new.html.erb?variant=desktop&layout=some-layout'
```
ActionPack Variants
## Contribute
Questions, bug reports and pull requests welcome. See [GitHub issues](https://github.com/aptx4869/rails-view-loader/issues).
## License
MIT