fnando/babel-schmooze-sprockets

View on GitHub
README.md

Summary

Maintainability
Test Coverage
# Babel + Schmooze + Sprockets

[![Travis-CI](https://travis-ci.org/fnando/babel-schmooze-sprockets.png)](https://travis-ci.org/fnando/babel-schmooze-sprockets)
[![Code Climate](https://codeclimate.com/github/fnando/babel-schmooze-sprockets/badges/gpa.svg)](https://codeclimate.com/github/fnando/babel-schmooze-sprockets)
[![Test Coverage](https://codeclimate.com/github/fnando/babel-schmooze-sprockets/badges/coverage.svg)](https://codeclimate.com/github/fnando/babel-schmooze-sprockets/coverage)
[![Gem](https://img.shields.io/gem/v/babel-schmooze-sprockets.svg)](https://rubygems.org/gems/babel-schmooze-sprockets)
[![Gem](https://img.shields.io/gem/dt/babel-schmooze-sprockets.svg)](https://rubygems.org/gems/babel-schmooze-sprockets)

Bring Babel 6 to Ruby on Rails.

## Installation

Add this line to your application's Gemfile:

```ruby
gem "babel-schmooze-sprockets"
```

And then execute:

    $ bundle

Or install it yourself as:

    $ gem install babel-schmooze-sprockets

## Usage

Include the following directive to your main file (e.g. `application.js`), before anything is loaded:

```js
//= require babel
```

This will load [external-helpers](http://babeljs.io/docs/plugins/external-helpers/) and [polyfill](http://babeljs.io/docs/usage/polyfill/).

You can manually load each of those files too:

```js
//= require babel/external-helpers
//= require babel/polyfill
```

### Defaults

By default, this is what you get:

- AMD modules
- ES2015 preset
- Additional Babel plugins
  - transform-async-to-generator
  - transform-es2015-modules-amd
  - transform-es3-member-expression-literals
  - transform-es3-property-literals
  - transform-function-bind

### Notice about default modules and AMD

If you try to load a module exported with ES6 module system using `require` you'll notice that you have to call `.default()` on the returned object. This is due to a change on Babel 6.

So, if you're exporting a module like the following

```js
// app/assets/javascripts/lib/boot.es6
export default function boot() {
  // do something
}
```

this is how you'll have to call:

```js
// app/assets/javascripts/application.js
//= require almond/almond
//= require_dir ./lib
//= require_dir ./application
//= require_self

require(["lib/boot"], function(boot) {
  boot.default();
});
```

### Using custom plugins

Schmooze only allows one root directory; this means that you'll have to install all plugins locally if you want to use any other plugin not included by this gem.

Assuming you have a `package.json` file, you can install the default plugins with the following command:

```
npm install --save-dev \
  babel-core \
  babel-plugin-add-module-exports \
  babel-plugin-transform-async-to-generator \
  babel-plugin-transform-es2015-modules-amd \
  babel-plugin-transform-es3-member-expression-literals \
  babel-plugin-transform-es3-property-literals \
  babel-plugin-transform-function-bind babel-preset-es2015
```

Then you can install your custom plugin with `npm install --save-dev <your custom plugin>`.

You'll also have to redefine Sprocket's Babel initialization. Create a file at `config/initializers/babel.rb`; the following example extends the default configuration:

```ruby
Rails.application.config.assets.configure do |env|
  processor = BabelSchmoozeSprockets::BabelProcessor.new({
    root_dir: File.expand_path(Rails.root.to_s),
    options: {
      presets: BabelSchmoozeSprockets::BabelProcessor::DEFAULT_PRESETS,
      plugins: BabelSchmoozeSprockets::BabelProcessor::DEFAULT_PLUGINS + ["your-custom-plugin"]
    }
  })

  env.register_transformer "application/ecmascript-6", "application/javascript", processor
end
```

You may configure the presets and plugins lists as you wish.

### Using async/await

Make sure you require `babel-polyfill` in your main file (e.g. `application.js`) by adding:

```js
//= require babel

// or

//= require babel/polyfill
```

## Articles

- [Using ES2015 with Asset Pipeline on Ruby on Rails](http://nandovieira.com/using-es2015-with-asset-pipeline-on-ruby-on-rails).

## Development

After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).

### Updating NPM packages

To update NPM packages before releasing a new version, just run `./bin/update-npm-deps`.

## Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/fnando/babel-schmooze-sprockets. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the [Contributor Covenant](http://contributor-covenant.org) code of conduct.

## License

The gem is available as open source under the terms of the [MIT License](http://opensource.org/licenses/MIT).