jsbundling-rails 0.1.0 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f0ef32480b80f6c274f0bb59e0785cf22aa157b19e688fcbebbe4544d195c81e
4
- data.tar.gz: 131dffe9aa231f4a456452a3b9ba67f0d91d2079ebd3102a43c30c63bdc5f2a0
3
+ metadata.gz: 5b113c6e1687d0f4adf95e471b46bd54fc0096b3f999d62f11145f14253a656e
4
+ data.tar.gz: b59b92d84c86299b4ced4902c41f954e97131c5ea4a94edbc8390e65ba16ce31
5
5
  SHA512:
6
- metadata.gz: 22aa53c9b71baa3704f447ea717f9ccd2d7b489dbb17eb0885dd65fb94bb3d678ec15a5d74589c4c5c5ec8bbc89603cc2963b978f38047d28ba02b15b45d9638
7
- data.tar.gz: db1a29cb7d04cf0e61cfdc0b03f44ffe766d12936ef7c5147cd704297726724f7317fa7aa89737b6978c628b157c0454675b98e4530e3067ec14d54ee0f755f0
6
+ metadata.gz: d4d017b80b7a35e3bb10679dc4c996a484a19b3cd0083c2d0f16bb52caafe48ade12ab4d92eb06210526471cf784ee8b6476a4fee04a12223c95d8473971fba3
7
+ data.tar.gz: c72ec41731afdad48d9b2e5e852b2d3a3ea95a915b0e0a7ffcbbb20784625afcdd727fc3bf2687261cca0d0a70acd2d867f0dd2923598789f8e1a8354ec76a7e
data/README.md CHANGED
@@ -1,29 +1,33 @@
1
1
  # JavaScript Bundling for Rails
2
2
 
3
- Use [esbuild](https://esbuild.github.io), [rollup.js](https://rollupjs.org), or [Webpack](https://webpack.js.org) to bundle your JavaScript, then deliver it via the asset pipeline in Rails. This gem provides installers to get you going with the bundler of your choice in a new Rails application, and a convention to use `app/assets/bundles` to hold your bundled output as artifacts that are not checked into source control (the installer adds this directory to `.gitignore` by default).
3
+ Use [esbuild](https://esbuild.github.io), [rollup.js](https://rollupjs.org), or [Webpack](https://webpack.js.org) to bundle your JavaScript, then deliver it via the asset pipeline in Rails. This gem provides installers to get you going with the bundler of your choice in a new Rails application, and a convention to use `app/assets/builds` to hold your bundled output as artifacts that are not checked into source control (the installer adds this directory to `.gitignore` by default).
4
4
 
5
- You develop using this approach by running the bundler in watch mode in a terminal with `yarn build --watch` (and your Rails server in another, if you're not using something like [puma-dev](https://github.com/puma/puma-dev)). Whenever the bundler detects changes to any of the JavaScript files in your project, it'll bundle `app/javascript/application.js` into `app/assets/bundles/javascript.js` (and all other entry points placed in the root of `app/javascript`). You can refer to the build output in your layout using the standard asset pipeline approach with `<%= javascript_include_tag "application" %>`.
5
+ You develop using this approach by running the bundler in watch mode in a terminal with `yarn build --watch` (and your Rails server in another, if you're not using something like [puma-dev](https://github.com/puma/puma-dev)). Whenever the bundler detects changes to any of the JavaScript files in your project, it'll bundle `app/javascript/application.js` into `app/assets/builds/application.js` (and all other entry points configured). You can refer to the build output in your layout using the standard asset pipeline approach with `<%= javascript_include_tag "application", defer: true %>`.
6
6
 
7
- When you deploy your application to production, the bundler attaches to the `assets:precompile` task to ensure that all your package dependencies from `package.json` have been installed via npm, and then runs `yarn build` to process all the entry points, as it would in development. The latter files are then picked up by the asset pipeline, digested, and copied into public/assets, as any other asset pipeline file.
7
+ When you deploy your application to production, the `javascript:build` task attaches to the `assets:precompile` task to ensure that all your package dependencies from `package.json` have been installed via yarn, and then runs `yarn build` to process all the entry points, as it would in development. The latter files are then picked up by the asset pipeline, digested, and copied into public/assets, as any other asset pipeline file.
8
8
 
9
9
  This also happens in testing where the bundler attaches to the `test:prepare` task to ensure the JavaScript has been bundled before testing commences. (Note that this currently only applies to rails `test:*` tasks (like `test:all` or `test:controllers`), not "rails test", as that doesn't load `test:prepare`).
10
10
 
11
+ If your testing library of choice does not define a `test:prepare` Rake task, ensure that your test suite runs `javascript:build` to bundle JavaScript before testing commences.
12
+
11
13
  That's it!
12
14
 
13
- You can configure your bundler options in the `build` script in `package.json` or via the installer-generated rollup.config.js for rollup.js or webpack.config.json for Webpack (esbuild does not have a default configuration format).
15
+ You can configure your bundler options in the `build` script in `package.json` or via the installer-generated `rollup.config.js` for rollup.js or `webpack.config.json` for Webpack (esbuild does not have a default configuration format).
16
+
17
+ If you're already using [`webpacker`](https://github.com/rails/webpacker) and you're wondering if you should migrate to `jsbundling-rails`, have a look at [the high-level comparison](./docs/comparison_with_webpacker.md).
14
18
 
15
19
 
16
20
  ## Installation
17
21
 
18
- You must already have node and yarn installed on your system. Then:
22
+ You must already have node and yarn installed on your system. You will also need npx version 7.1.0 or later. Then:
19
23
 
20
24
  1. Add `jsbundling-rails` to your Gemfile with `gem 'jsbundling-rails'`
21
25
  2. Run `./bin/bundle install`
22
- 3. Run `./bin/rails javascript:[rollup|esbuild|webpack]:install`
26
+ 3. Run `./bin/rails javascript:install:[esbuild|rollup|webpack]`
23
27
 
24
- Or, in Rails 7+, you can preconfigure your new application to use a specific bundler with `rails new myapp -j [rollup|esbuild|webpack]`.
28
+ Or, in Rails 7+, you can preconfigure your new application to use a specific bundler with `rails new myapp -j [esbuild|rollup|webpack]`.
25
29
 
26
30
 
27
31
  ## License
28
32
 
29
- rollup.js for Rails is released under the [MIT License](https://opensource.org/licenses/MIT).
33
+ JavaScript Bundling for Rails is released under the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,2 @@
1
+ web: bin/rails server -p 3000
2
+ js: yarn build --watch
data/lib/install/dev ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env bash
2
+
3
+ foreman start -f Procfile.dev
@@ -1,3 +1,5 @@
1
- say "Create default package.json and install esbuild"
2
- copy_file "#{__dir__}/package.json", "package.json"
1
+ say "Install esbuild"
3
2
  run "yarn add esbuild"
3
+
4
+ say "Add build script"
5
+ run %(npm set-script build "esbuild app/javascript/*.* --bundle --outdir=app/assets/builds")
@@ -1,19 +1,19 @@
1
1
  say "Compile into app/assets/builds"
2
2
  empty_directory "app/assets/builds"
3
3
  keep_file "app/assets/builds"
4
- append_to_file "app/assets/config/manifest.js", %(//= link_tree ../builds .js\n)
4
+ append_to_file "app/assets/config/manifest.js", %(//= link_tree ../builds\n)
5
5
 
6
6
  if Rails.root.join(".gitignore").exist?
7
- append_to_file ".gitignore", %(/app/assets/builds\n)
7
+ append_to_file(".gitignore", %(\n/app/assets/builds/*\n!/app/assets/builds/.keep\n/node_modules\n))
8
8
  end
9
9
 
10
10
  if (app_layout_path = Rails.root.join("app/views/layouts/application.html.erb")).exist?
11
11
  say "Add JavaScript include tag in application layout"
12
- insert_into_file app_layout_path.to_s,
13
- %(\n <%= javascript_include_tag "application", "data-track-turbo": "true", defer: true %>), before: /\s*<\/head>/
12
+ insert_into_file app_layout_path.to_s,
13
+ %(\n <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %>), before: /\s*<\/head>/
14
14
  else
15
15
  say "Default application.html.erb is missing!", :red
16
- say %( Add <%= javascript_include_tag "application", "data-track-turbo": "true", defer: true %> within the <head> tag in your custom layout.)
16
+ say %( Add <%= javascript_include_tag "application", "data-turbo-track": "reload", defer: true %> within the <head> tag in your custom layout.)
17
17
  end
18
18
 
19
19
  unless (app_js_entrypoint_path = Rails.root.join("app/javascript/application.js")).exist?
@@ -21,3 +21,22 @@ unless (app_js_entrypoint_path = Rails.root.join("app/javascript/application.js"
21
21
  empty_directory app_js_entrypoint_path.parent.to_s
22
22
  copy_file "#{__dir__}/application.js", app_js_entrypoint_path
23
23
  end
24
+
25
+ unless Rails.root.join("package.json").exist?
26
+ say "Add default package.json"
27
+ copy_file "#{__dir__}/package.json", "package.json"
28
+ end
29
+
30
+ if Rails.root.join("Procfile.dev").exist?
31
+ append_to_file "Procfile.dev", "js: yarn build --watch"
32
+ else
33
+ say "Add default Procfile.dev"
34
+ copy_file "#{__dir__}/Procfile.dev", "Procfile.dev"
35
+
36
+ say "Ensure foreman is installed"
37
+ run "gem install foreman"
38
+ end
39
+
40
+ say "Add bin/dev to start foreman"
41
+ copy_file "#{__dir__}/dev", "bin/dev"
42
+ chmod "bin/dev", 0755, verbose: false
@@ -0,0 +1,4 @@
1
+ {
2
+ "name": "app",
3
+ "private": "true"
4
+ }
@@ -1,4 +1,6 @@
1
- say "Create default package.json and install rollup with config"
2
- copy_file "#{__dir__}/package.json", "package.json"
1
+ say "Install rollup with config"
3
2
  copy_file "#{__dir__}/rollup.config.js", "rollup.config.js"
4
3
  run "yarn add rollup @rollup/plugin-node-resolve"
4
+
5
+ say "Add build script"
6
+ run %(npm set-script build "rollup -c rollup.config.js")
@@ -1,4 +1,6 @@
1
- say "Create default package.json and install Webpack with config"
2
- copy_file "#{__dir__}/package.json", "package.json"
1
+ say "Install Webpack with config"
3
2
  copy_file "#{__dir__}/webpack.config.js", "webpack.config.js"
4
3
  run "yarn add webpack webpack-cli"
4
+
5
+ say "Add build script"
6
+ run %(npm set-script build "webpack --config webpack.config.js")
@@ -3,9 +3,11 @@ const webpack = require('webpack')
3
3
 
4
4
  module.exports = {
5
5
  mode: "production",
6
- entry: "./app/javascript/application.js",
6
+ entry: {
7
+ application: "./app/javascript/application.js"
8
+ },
7
9
  output: {
8
- filename: "application.js",
10
+ filename: "[name].js",
9
11
  path: path.resolve(__dirname, "app/assets/builds"),
10
12
  },
11
13
  plugins: [
@@ -1,3 +1,3 @@
1
1
  module Jsbundling
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.5"
3
3
  end
@@ -6,4 +6,9 @@ namespace :javascript do
6
6
  end
7
7
 
8
8
  Rake::Task["assets:precompile"].enhance(["javascript:build"])
9
- Rake::Task["test:prepare"].enhance(["javascript:build"])
9
+
10
+ if Rake::Task.task_defined?("test:prepare")
11
+ Rake::Task["test:prepare"].enhance(["javascript:build"])
12
+ elsif Rake::Task.task_defined?("db:test:prepare")
13
+ Rake::Task["db:test:prepare"].enhance(["javascript:build"])
14
+ end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsbundling-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Heinemeier Hansson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-09-06 00:00:00.000000000 Z
11
+ date: 2021-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rails
14
+ name: railties
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: 6.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: sprockets-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 2.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 2.0.0
27
41
  description:
28
42
  email: david@loudthinking.com
29
43
  executables: []
@@ -32,15 +46,15 @@ extra_rdoc_files: []
32
46
  files:
33
47
  - MIT-LICENSE
34
48
  - README.md
49
+ - lib/install/Procfile.dev
35
50
  - lib/install/application.js
51
+ - lib/install/dev
36
52
  - lib/install/esbuild/install.rb
37
- - lib/install/esbuild/package.json
38
53
  - lib/install/install.rb
54
+ - lib/install/package.json
39
55
  - lib/install/rollup/install.rb
40
- - lib/install/rollup/package.json
41
56
  - lib/install/rollup/rollup.config.js
42
57
  - lib/install/webpack/install.rb
43
- - lib/install/webpack/package.json
44
58
  - lib/install/webpack/webpack.config.js
45
59
  - lib/jsbundling-rails.rb
46
60
  - lib/jsbundling/engine.rb
@@ -1,7 +0,0 @@
1
- {
2
- "name": "app",
3
- "private": "true",
4
- "scripts": {
5
- "build": "esbuild app/javascript/*.* --bundle --outdir=app/assets/builds"
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "app",
3
- "private": "true",
4
- "scripts": {
5
- "build": "rollup -c rollup.config.js"
6
- }
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "name": "app",
3
- "private": "true",
4
- "scripts": {
5
- "build": "webpack --config webpack.config.js"
6
- }
7
- }