jsbundling-rails 0.1.1 → 0.1.6

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: 709473c1e464dc72e16f938fba464de26e746a7c7a7bb599d4e55e5b5d3084e7
4
- data.tar.gz: ee9e7ac72bc4e5642b603773763b9d1dbf1ad11f5f21ea562125bbc26e68cb79
3
+ metadata.gz: 2f033365241900785d685cec941c60f95bc277fd5cfdc3d890ef7eefce5dfb56
4
+ data.tar.gz: 19fcf6845a974aef5f3117be9b49d89c1b12feb939aca04630f76d67386eadef
5
5
  SHA512:
6
- metadata.gz: 0dd2e4765b05d630f0b278b0c7d5a6e909e8f42a630888763535cb19d6d51f92429767bb3da9960904e1e32ebb29747d060135fbffe6562b382dfad07d8f3071
7
- data.tar.gz: fbe17aa3c5ecae4d70643c6cd6e485b9c8df441de245fdc026b712d98da5494f428b68a4e92466819f3abfc904b3c7ac40f73fbb09637a465c37028a897a0583
6
+ metadata.gz: b11c77766dc06e798b6ef21c389e56622a99eefad0783ae9504fa79f38f3f5a04382d4dcfd07595af0b5c17622ea631280b23a6b7eb598032be60acd6492b4e0
7
+ data.tar.gz: ef6febf07270d97e17032ef5599eee322d61607188e1a2a9ad2319ab02322175f5f5db29ac1577246d72b02f8f1ea58f719cda64961ff82fea39c904d0ee8abc
data/README.md CHANGED
@@ -2,24 +2,28 @@
2
2
 
3
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/builds/javascript.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 %>`.
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
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
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).
14
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).
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:[esbuild|rollup|webpack]:install`
26
+ 3. Run `./bin/rails javascript:install:[esbuild|rollup|webpack]`
23
27
 
24
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
 
@@ -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,10 +1,13 @@
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
+
5
+ if (sprockets_manifest_path = Rails.root.join("app/assets/config/manifest.js")).exist?
6
+ append_to_file sprockets_manifest_path, %(//= link_tree ../builds\n)
7
+ end
5
8
 
6
9
  if Rails.root.join(".gitignore").exist?
7
- append_to_file ".gitignore", %(/app/assets/builds\n)
10
+ append_to_file(".gitignore", %(\n/app/assets/builds/*\n!/app/assets/builds/.keep\n/node_modules\n))
8
11
  end
9
12
 
10
13
  if (app_layout_path = Rails.root.join("app/views/layouts/application.html.erb")).exist?
@@ -21,3 +24,22 @@ unless (app_js_entrypoint_path = Rails.root.join("app/javascript/application.js"
21
24
  empty_directory app_js_entrypoint_path.parent.to_s
22
25
  copy_file "#{__dir__}/application.js", app_js_entrypoint_path
23
26
  end
27
+
28
+ unless Rails.root.join("package.json").exist?
29
+ say "Add default package.json"
30
+ copy_file "#{__dir__}/package.json", "package.json"
31
+ end
32
+
33
+ if Rails.root.join("Procfile.dev").exist?
34
+ append_to_file "Procfile.dev", "js: yarn build --watch"
35
+ else
36
+ say "Add default Procfile.dev"
37
+ copy_file "#{__dir__}/Procfile.dev", "Procfile.dev"
38
+
39
+ say "Ensure foreman is installed"
40
+ run "gem install foreman"
41
+ end
42
+
43
+ say "Add bin/dev to start foreman"
44
+ copy_file "#{__dir__}/dev", "bin/dev"
45
+ 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.1"
2
+ VERSION = "0.1.6"
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.1
4
+ version: 0.1.6
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-19 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
- }