• R
    Convert ActionCable javascript to ES2015 modules with modern build environment · c96139af
    Richard Macklin 提交于
    We've replaced the sprockets `//= require` directives with ES2015
    imports. As a result, the ActionCable javascript can now be compiled
    with rollup (like ActiveStorage already is).
    
    - Rename action_cable/index.js.erb -> action_cable/index.js
    
    - Add rake task to generate a javascript module of the ActionCable::INTERNAL ruby hash
    
      This will allow us to get rid of ERB from the actioncable javascript,
      since it is only used to interpolate ActionCable::INTERNAL.to_json.
    
    - Import INTERNAL directly in ActionCable Connection module
    
      This is necessary to remove a load-order dependency conflict in the
      rollup-compiled build. Using ActionCable.INTERNAL would result in a
      runtime error:
      ```
      TypeError: Cannot read property 'INTERNAL' of undefined
      ```
      because ActionCable.INTERNAL is not set before the Connection module
      is executed.
    
      All other ActionCable.* references are executed inside of the body of a
      function, so there is no load-order dependency there.
    
    - Add eslint and eslint-plugin-import devDependencies to actioncable
    
      These will be used to add a linting setup to actioncable like the one
      in activestorage.
    
    - Add .eslintrc to actioncable
    
      This lint configuration was copied from activestorage
    
    - Add lint script to actioncable
    
      This is the same as the lint script in activestorage
    
    - Add babel-core, babel-plugin-external-helpers, and babel-preset-env devDependencies to actioncable
    
      These will be used to add ES2015 transpilation support to actioncable
      like we have in activestorage.
    
    - Add .babelrc to actioncable
    
      This configuration was copied from activestorage
    
    - Enable loose mode in ActionCable's babel config
    
      This generates a smaller bundle when compiled
    
    - Add rollup devDependencies to actioncable
    
      These will be used to add a modern build pipeline to actioncable like
      the one in activestorage.
    
    - Add rollup config to actioncable
    
      This is essentially the same as the rollup config from activestorage
    
    - Add prebuild and build scripts to actioncable package
    
      These scripts were copied from activestorage
    
    - Invoke code generation task as part of actioncable's prebuild script
    
      This will guarantee that the action_cable/internal.js module is
      available at build time (which is important, because two other modules
      now depend on it).
    
    - Update actioncable package to reference the rollup-compiled files
    
      Now that we have a fully functional rollup pipeline in actioncable, we
      can use the compiled output in our npm package.
    
    - Remove build section from ActionCable blade config
    
      Now that rollup is responsible for building ActionCable, we can remove
      that responsibility from Blade.
    
    - Remove assets:compile and assets:verify tasks from ActionCable
    
      Now that we've added a compiled ActionCable bundle to version control,
      we don't need to compile and verify it at publish-time.
    
      (We're following the pattern set in ActiveStorage.)
    
    - Include compiled ActionCable javascript bundle in published gem
    
      This is necessary to maintain support for depending on the ActionCable
      javascript through the Sprockets asset pipeline.
    
    - Add compiled ActionCable bundle to version control
    
      This mirrors what we do in ActiveStorage, and allows ActionCable to
      continue to be consumed via the sprockets-based asset pipeline when
      using a git source instead of a published version of the gem.
    c96139af
Analyzing file…
actioncable.gemspec 1.1 KB