Sha256: cf9be01d9d9a315efa062390853b78f38033a09d23d3770eec3e3d762baca498

Contents?: true

Size: 1.11 KB

Versions: 1

Compression:

Stored size: 1.11 KB

Contents

require 'sprockets'
require 'tilt'
require 'pathname'
require 'shellwords'

module Sprockets
  # Postprocessor that runs the computed source of Javascript files
  # through browserify, resulting in a self-contained files including all
  # referenced modules
  class Browserify < Tilt::Template

    def prepare
    end

    def evaluate(scope, locals, &block)
      if (scope.pathname.dirname+'package.json').exist?
        deps = `NODE_PATH=#{Shellwords.shellescape((gem_dir+'node_modules').to_s)} node -e "mdeps=require('module-deps'),through=require('through');mdeps('#{scope.pathname}').pipe(through(function(d){ console.log(d.id); }))"`
        deps.lines.reject{|line| line =~ /module-deps/}.drop(1).each{|path| scope.depend_on path.strip}
        # TODO also throw an error if browserify fucks up
        @output ||= `#{browserify_executable} -d #{scope.pathname}`
      else
        data
      end
    end

  protected

    def gem_dir
      @gem_dir ||= Pathname.new(__FILE__).dirname + '../..'
    end

    def browserify_executable
      @browserify_executable ||= gem_dir + 'node_modules/.bin/browserify'
    end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sprockets-browserify-0.1.0 lib/sprockets/browserify.rb