# GulpAssets Rails Plugin to augment frontend development with a gulp/webpack based workflow. - Installs Javascript infrastructure in your Rails project to manage frontend assets - Provides view helpers to Rails that allow you to easily reference gulp generated assets from Rails views - Puts Livereload into the Rails middleware stack. This injects the Livereload client into Rails-renderd pages, updates are triggered from gulp. ## Usage 1. Add `gem 'gulp_assets' to your Gemfile and run `bundle install`. 2. Run `rails generate gulp_assets` to generate all necessary files. 3. Develop your frontend code in the `frontend` directory 4. Reference files generated by gulp using the `gulp_asset_path` helper 5. Run `npm start` during development for livereload/Webpack Hot Module replacement. ## Structure `frontend/assets` contains static assets (images, fonts, icons). A static asset is a file that is not processed and that does not contain references to other files. They are simply copied to `public/assets/assets`. `frontend/stylesheets` contains SCSS files which are compiled to `public/assets/stylesheets`. Files beginning with underscores are ignored. `frontend/javascripts/main.js` is the entry point for the client-side Javascript. This is picked up by Webpack, bundled and copied to `public/assets/javascripts`. If you need additional entry points, please adjust the webpack configuration accordingly. ## Gulp Commands ### `gulp default` Runs the webpack development server which will watch files, trigger livereload and serve static assets. This also runs if you execute `npm start`. ### `gulp precompile` Compiles assets for production, hashes their names and generates a `rev-mainfest.json`, which is used by the `gulp_asset_path` helper to generate the correct links with the hash in the filename. ## Referencing gulp assets from Rails views The `gulp_assets_path` helper takes a partial path as a parameter that sits inside the `public/assets` folder. It then operates differently, depending on the `RAILS_ENV`: - development: Prepend the path with the correct location on the webpack dev server, usually `//localhost:8080/assets`. `javascripts/main.js` would become `//localhost:8080/assets/javascripts/main.js`. - production: Prepend the path with the correct asset path and replace the filename with the hashed version. `javascripts/main.js` would become `/assets/javascripts/main-a42bb48a5f83.js`. ### Shortcuts To include a gulp-generated javascript or stylesheet, use the `gulp_javascript` or `gulp_stylesheet` helper: <%= gulp_javascript "main" %> <%= gulp_stylesheet "main" %> Since "main" is the default name, you can omit it: <%= gulp_javascript %> <%= gulp_stylesheet %> Both accept a second parameter for overwriting attributes. This can be used for example to change the `media` attribute for a stylesheet. ## Examples ### CSS - `frontend/stylesheets/main.scss` Input file - `public/assets/stylesheets/main.css` Output File - `` Used to link to the file. - `<%= gulp_stylesheet "main" %>` or `<%= gulp_stylesheet %>` also generate correct links ### JS - `frontend/javscripts/main.js` Input file - `public/assets/javscripts/main.js` Output File - `` - `<%= gulp_javascript "main" %>` or `<%= gulp_javascript %>` also generate correct links