webpacker-pnpm 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +7 -0
  2. data/.gitattributes +1 -0
  3. data/.gitignore +3 -0
  4. data/.rubocop.yml +91 -0
  5. data/.travis.yml +45 -0
  6. data/CHANGELOG.md +45 -0
  7. data/Gemfile +17 -0
  8. data/README.md +35 -0
  9. data/Rakefile +11 -0
  10. data/bin/console +15 -0
  11. data/bin/setup +8 -0
  12. data/gemfiles/Gemfile-rails-edge +12 -0
  13. data/gemfiles/Gemfile-rails.5.2.x +9 -0
  14. data/gemfiles/Gemfile-rails.6.0.x +9 -0
  15. data/lib/webpacker/pnpm.rb +5 -0
  16. data/lib/webpacker/pnpm/patches.rb +53 -0
  17. data/lib/webpacker/pnpm/railtie.rb +24 -0
  18. data/lib/webpacker/pnpm/version.rb +7 -0
  19. data/lib/webpacker/tasks/check_pnpm.rake +27 -0
  20. data/lib/webpacker/tasks/env.rake +20 -0
  21. data/lib/webpacker/tasks/pnpm_install.rake +14 -0
  22. data/test/rake_tasks_test.rb +106 -0
  23. data/test/test_app/.gitignore +7 -0
  24. data/test/test_app/Rakefile +5 -0
  25. data/test/test_app/app/javascript/packs/application.js +10 -0
  26. data/test/test_app/app/javascript/packs/multi_entry.css +4 -0
  27. data/test/test_app/app/javascript/packs/multi_entry.js +4 -0
  28. data/test/test_app/bin/rails +6 -0
  29. data/test/test_app/bin/rake +6 -0
  30. data/test/test_app/bin/setup +27 -0
  31. data/test/test_app/bin/webpack +14 -0
  32. data/test/test_app/bin/webpack-dev-server +14 -0
  33. data/test/test_app/config.ru +7 -0
  34. data/test/test_app/config/application.rb +13 -0
  35. data/test/test_app/config/boot.rb +0 -0
  36. data/test/test_app/config/environment.rb +6 -0
  37. data/test/test_app/config/webpack/development.js +0 -0
  38. data/test/test_app/config/webpack/environment.js +3 -0
  39. data/test/test_app/config/webpacker.yml +96 -0
  40. data/test/test_app/config/webpacker_public_root.yml +19 -0
  41. data/test/test_app/package.json +13 -0
  42. data/test/test_app/pnpm-lock.yaml +20 -0
  43. data/test/test_app/public/packs/manifest.json +31 -0
  44. data/test/test_helper.rb +64 -0
  45. data/webpacker-pnpm.gemspec +36 -0
  46. metadata +226 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 9e0c39889bfdad4a14a2fc35250e7eaa33fd49bf48ecc082c44d1985884fbe89
4
+ data.tar.gz: 8f27fae2d742a2b4c27e0fa675480dda85771bfd120e283fa706c80ce7414fa5
5
+ SHA512:
6
+ metadata.gz: 8715f49514245b10d8ed85169c5edadcb2ab8905880f9afdd273121835336c175dec087f05b639179024eeea4fc1745ca24c73d00c24fc92d06bbb85ab591d02
7
+ data.tar.gz: fd7a0f6cc602c9a7d4ba0a2689fc87feae4d7f93c470c9c5fc8b7f62cfd364fd3152839448150a58c523a0e516aa229eed3d9d07cc1083ed0b4ecaeb9938a5b8
@@ -0,0 +1 @@
1
+ * text=lf
@@ -0,0 +1,3 @@
1
+ /tmp/
2
+ /**/*.log
3
+ Gemfile.lock
@@ -0,0 +1,91 @@
1
+ require: rubocop-rails
2
+ AllCops:
3
+ Exclude:
4
+ - "node_modules/**/*"
5
+
6
+ # disable length length checking, as it tends to make things worse in the majority
7
+ # of cases. however, it is good practice keep lines <= 85 columns so they remain
8
+ # readable.
9
+ Layout/LineLength:
10
+ Enabled: false
11
+
12
+ # disable documentation checking. many classes do not require top-level comments,
13
+ # and their inclusion can actually obscure their function.
14
+ Style/Documentation:
15
+ Enabled: false
16
+
17
+ # functionalization is important, but the Rails' idiom for returning key-value
18
+ # maps can raise a false alarm with the max line number (10). increase the value
19
+ # to something more reasonable given the circumstances.
20
+ Metrics/MethodLength:
21
+ Max: 20
22
+ ExcludedMethods:
23
+ - test_rake_tasks
24
+
25
+ # if you're specifying access modifiers, it is likely intentional. force RuboCop
26
+ # to trust your decision making.
27
+ Lint/UselessAccessModifier:
28
+ Enabled: false
29
+
30
+ # flag potential memory leaks, like when opening a file.
31
+ Style/AutoResourceCleanup:
32
+ Enabled: true
33
+
34
+ # single quotes are meant for single characters. double quotes are meant for
35
+ # strings, which are arrays of multiple characters. there are a whole host of
36
+ # other differences and functions; if you're creating a string, you nearly always
37
+ # should use double quotes.
38
+ #
39
+ # https://en.wikipedia.org/wiki/Delimiter#Bracket_delimiters
40
+ # Schwartz, Randal (2005). Learning Perl. ISBN 978-0-596-10105-3.
41
+ Style/StringLiterals:
42
+ Enabled: true
43
+ EnforcedStyle: double_quotes
44
+
45
+ # flags methods that violate the default ABC magnitude (15). The ABC metric
46
+ # quantizes the size of a method, and is calculated based on the number of
47
+ # assignment operations, possible execution branches, and number of conditionals.
48
+ #
49
+ # https://en.wikipedia.org/wiki/ABC_Software_Metric
50
+ Metrics/AbcSize:
51
+ Enabled: true
52
+ IgnoredMethods:
53
+ - test_rake_tasks
54
+ - chdir_concurrent
55
+
56
+ # this simply doesn't work in a cross-platform development environment. Bit
57
+ # flags across UNIX and Windows platforms are volatile, and thus there is no
58
+ # way to ensure this passes besides explicitly granting execute permissions
59
+ # in CI config (which would defeat the purpose).
60
+ Lint/ScriptPermission:
61
+ Enabled: false
62
+
63
+ Layout/SpaceAroundMethodCallOperator:
64
+ Enabled: true
65
+
66
+ Lint/RaiseException:
67
+ Enabled: true
68
+
69
+ Lint/StructNewOverride:
70
+ Enabled: true
71
+
72
+ Style/ExponentialNotation:
73
+ Enabled: true
74
+
75
+ Style/HashEachMethods:
76
+ Enabled: true
77
+
78
+ Style/HashTransformKeys:
79
+ Enabled: true
80
+
81
+ Style/HashTransformValues:
82
+ Enabled: true
83
+
84
+ Layout/EmptyLinesAroundAttributeAccessor:
85
+ Enabled: true
86
+
87
+ Style/SlicingWithRange:
88
+ Enabled: true
89
+
90
+ Style/RescueModifier:
91
+ Enabled: false
@@ -0,0 +1,45 @@
1
+ language: ruby
2
+ os: linux
3
+ dist: bionic
4
+ before_install:
5
+ - gem install rubygems-update && update_rubygems
6
+ - yes | rvm @global do gem install bundler -v 2.1.4 || true
7
+ rvm:
8
+ - 2.4.9
9
+ - 2.5.5
10
+ - 2.6.5
11
+ - 2.7.0
12
+ - ruby-head
13
+ gemfile:
14
+ - gemfiles/Gemfile-rails.5.2.x
15
+ - gemfiles/Gemfile-rails.6.0.x
16
+ - gemfiles/Gemfile-rails-edge
17
+ cache:
18
+ bundler: true
19
+ npm: false
20
+ yarn: false
21
+ directories:
22
+ - node_modules
23
+ - "~/.pnpm-store"
24
+
25
+ install:
26
+ - bundle install --jobs 3 --retry 3
27
+ - nvm install 12
28
+ - node -v
29
+ - curl -L https://raw.githubusercontent.com/pnpm/self-installer/master/install.js | node
30
+ - pnpm config set store-dir ~/.pnpm-store
31
+ - pnpm install --frozen-lockfile
32
+ script:
33
+ - bundle exec rubocop
34
+ - bundle exec rake test
35
+ jobs:
36
+ allow_failures:
37
+ - gemfile: gemfiles/Gemfile-rails-edge
38
+ - rvm: ruby-head
39
+ exclude:
40
+ - rvm: 2.4.9
41
+ gemfile: gemfiles/Gemfile-rails-edge
42
+ - rvm: 2.5.5
43
+ gemfile: gemfiles/Gemfile-rails-edge
44
+ - rvm: 2.4.9
45
+ gemfile: gemfiles/Gemfile-rails.6.0.x
@@ -0,0 +1,45 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on Keep a Changelog (<https://keepachangelog.com/en/1.0.0/>). This project adheres to Semantic Versioning (<https://semver.org/spec/v2.0.0.html>).
6
+
7
+ ## [v1.2.0] - 2020-05-14
8
+
9
+ ### Added
10
+
11
+ - Compatibility with Rails' Template API via command execution hooks and keyword substitution.
12
+ - Support for existing Yarn Rake task dependence through task aliasing and redirection.
13
+ - Additional Rake tasks to test injection and interception logic.
14
+ - Utility method for concurrent and scoped `chdir` calls.
15
+
16
+ ### Changed
17
+
18
+ - Gem dependencies to reflect up-to-date versions.
19
+ - RuboCop formatting rules to support latest versions of Ruby.
20
+ - Test application structure to allow application booting.
21
+ - Rake task tests to utilize concurrent `chdir` calls.
22
+ - Tests to support Rails <6.x `[bugfix]`.
23
+ - Tests to support Ruby 2.4.9 `[bugfix]`.
24
+
25
+ ### Removed
26
+
27
+ - Webpacker git submodule as method for replacing default Rails' rake tasks.
28
+ - Dependence on a specific version of Webpacker.
29
+
30
+ ## [v1.1.0] - 2020-04-19
31
+
32
+ ### Changed
33
+
34
+ - RuboCop formatting rules to more align with Rails' style guide.
35
+ - TypeScript installation tasks based on Webpacker v5.1.0.
36
+ - Rake tasks to extend ActiveSupport and utilize concurrent threading.
37
+
38
+ ## [v1.0.0] - 2020-04-17
39
+
40
+ ### Added
41
+
42
+ - Gem specifications and foundational files, generated by Bundler v2.0.2, for defining a Ruby gem.
43
+ - Hook into Rails' engine loader for conditional task loading.
44
+ - Tasks replacing Yarn with pnpm for Webpacker v5.0.1, included as a submodule.
45
+ - Test suite with dummy application.
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+ gemspec
5
+
6
+ gem "rack-proxy", require: false
7
+ gem "rails", ">= 5.2"
8
+ gem "rake", ">= 12.3.3"
9
+ gem "semantic_range", require: false
10
+
11
+ install_if -> { Gem.win_platform? } do
12
+ gem "tzinfo-data"
13
+ end
14
+
15
+ group :test do
16
+ gem "minitest", ">= 5"
17
+ end
@@ -0,0 +1,35 @@
1
+ # webpacker-pnpm
2
+
3
+ ![version](https://img.shields.io/gem/v/webpacker-pnpm?label=version&style=flat-square)
4
+ [![status](https://img.shields.io/travis/thearchitector/webpacker-pnpm?style=flat-square)](https://travis-ci.org/github/thearchitector/webpacker-pnpm)
5
+ ![downloads](https://img.shields.io/gem/dt/webpacker-pnpm?style=flat-square)
6
+ [![license](https://img.shields.io/badge/license-CC--BY--NC--SA--4.0-green?style=flat-square)](https://creativecommons.org/licenses/by-nc-sa/4.0/)
7
+
8
+ `webpacker-pnpm` replaces Rails' Yarn environment with [pnpm](https://pnpm.js.org/), which is a much smarter, efficient, and faster alternative Node.js package manager. You can read about the philosophy and technology behind `pnpm` in [this convincing blog post](https://www.kochan.io/nodejs/why-should-we-use-pnpm.html) by Zoltan Kochan, but in essence it reduces dependency resolution times and `node_modules` folder sizes to within reasonable ranges (not 30 seconds and 10 GiB).
9
+
10
+ ## Features
11
+
12
+ - Production-ready
13
+ - Drop-in seamless replacement for Yarn, no config required
14
+ - Supports Rails' Template API, including existing templates using Yarn
15
+ - Independent of official Webpacker versions
16
+ - Provides code sanity without the migraines
17
+ - Gives you more disk space
18
+
19
+ ## Installation
20
+
21
+ In order to use `webpacker-pnpm`, you must install `pnpm`. The official instructions are [here](https://pnpm.js.org/en/installation), but all they say is to run the following command:
22
+
23
+ ```sh
24
+ $ curl -L https://raw.githubusercontent.com/pnpm/self-installer/master/install.js | node
25
+ ```
26
+
27
+ After installing `pnpm`, simply add `webpacker-pnpm` to your app's `Gemfile`. There is no need to worry about your official Webpacker gem version, as this gem should be version-agnostic.
28
+
29
+ ```ruby
30
+ gem "webpacker-pnpm"
31
+ ```
32
+
33
+ ## License
34
+
35
+ This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. To view a copy of this license, visit <http://creativecommons.org/licenses/by-nc-sa/4.0/> or send a letter to Creative Commons, PO Box 1866, Mountain View, CA 94042, USA.
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new do |t|
7
+ t.libs << "test"
8
+ t.test_files = FileList["test/**/*_test.rb"]
9
+ end
10
+
11
+ task default: :test
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "webpacker/pnpm"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,12 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
4
+
5
+ gemspec path: "../"
6
+
7
+ gem "rails", github: "rails/rails"
8
+ gem "arel", github: "rails/arel"
9
+ gem "rake", ">= 11.1"
10
+ gem "rack-proxy", require: false
11
+ gem "minitest", "~> 5.0"
12
+ gem "byebug"
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: "../"
4
+
5
+ gem "rails", "~> 5.2.0"
6
+ gem "rake", ">= 11.1"
7
+ gem "rack-proxy", require: false
8
+ gem "minitest", "~> 5.0"
9
+ gem "byebug"
@@ -0,0 +1,9 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec path: "../"
4
+
5
+ gem "rails", "~> 6.0.0.rc2"
6
+ gem "rake", ">= 11.1"
7
+ gem "rack-proxy", require: false
8
+ gem "minitest", "~> 5.0"
9
+ gem "byebug"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "pnpm/version"
4
+ require_relative "pnpm/railtie"
5
+ require_relative "pnpm/patches"
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/generators"
4
+ require "webpacker/runner"
5
+ require "webpacker/compiler"
6
+
7
+ module Webpacker
8
+ module PNPM
9
+ # remove Yarn's lockfile from and add pnpm's lockfile to the default list of
10
+ # watched paths
11
+ Webpacker::Compiler.class_eval do
12
+ def default_watched_paths
13
+ [
14
+ *config.resolved_paths_globbed,
15
+ config.source_path_globbed,
16
+ "pnpm-lock.yaml", "package.json",
17
+ "config/webpack/**/*"
18
+ ].freeze
19
+ end
20
+ end
21
+
22
+ # intercept command execution via Thor to replace yarn with pnpm. this exists in
23
+ # order to patch existing Webpacker installation templates that make direct
24
+ # calls to install Yarn dependencies. as a result, this isn't a robust patch
25
+ Rails::Generators::Actions.module_eval do
26
+ def run(command, config = {})
27
+ cmd = command.to_s
28
+
29
+ if cmd.include?("yarn")
30
+ cmd.gsub!("yarn", "pnpm")
31
+ cmd.gsub!("--dev", "--save-dev")
32
+ end
33
+
34
+ super(cmd, config)
35
+ end
36
+ end
37
+
38
+ # intercept generic task loading to clear and alias Yarn tasks
39
+ Rails::Engine.class_eval do
40
+ alias_method :unfiltered_tasks, :load_tasks
41
+
42
+ def load_tasks(_app = self)
43
+ unfiltered_tasks
44
+ # rather than clear the tasks, alias them to the new pnpm tasks so
45
+ # that any external code will still run
46
+ Rake::Task["webpacker:check_yarn"].clear.enhance(["webpacker:check_pnpm"])
47
+ Rake::Task["webpacker:yarn_install"].clear.enhance(["webpacker:pnpm_install"])
48
+ Rake::Task["webpacker:info"].clear.enhance(["webpacker:env"])
49
+ Rake::Task["yarn:install"].clear.enhance(["webpacker:pnpm_install"])
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails/railtie"
4
+
5
+ module Webpacker
6
+ module PNPM
7
+ class Railtie < Rails::Railtie
8
+ private
9
+
10
+ rake_tasks do
11
+ # load all the rake tasks within the `tasks` directory
12
+ Dir[File.join(File.dirname(__FILE__), "../tasks/**/*.rake")].each do |task|
13
+ load task
14
+ end
15
+ end
16
+
17
+ # manually specify bin path to skip Yarn execution during Webpack runner
18
+ # initialization
19
+ config.before_configuration do
20
+ ENV["WEBPACKER_NODE_MODULES_BIN_PATH"] ||= File.join(`pnpm root`.chomp, ".bin")
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Webpacker
4
+ module PNPM
5
+ VERSION = "1.2.0"
6
+ end
7
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "semantic_range"
4
+ namespace :webpacker do
5
+ desc "Verifies if pnpm is installed"
6
+ task check_pnpm: [:environment] do
7
+ begin
8
+ $stdout.puts "Verifying pnpm version..."
9
+
10
+ pnpm_version = `pnpm --version`.chomp
11
+ raise Errno::ENOENT if pnpm_version.blank?
12
+
13
+ pnpm_range = ">=3.0.0"
14
+ is_unsupported = SemanticRange.satisfies?(pnpm_version, pnpm_range) rescue false
15
+
16
+ unless is_unsupported
17
+ warn "Webpacker requires pnpm \"#{pnpm_range}\" and you are using #{pnpm_version}. Please upgrade pnpm https://pnpm.js.org/en/installation/"
18
+ warn "Exiting!"
19
+ exit!
20
+ end
21
+ rescue Errno::ENOENT
22
+ warn "pnpm is not installed. Please download and install pnpm from https://pnpm.js.org/en/installation/"
23
+ warn "Exiting!"
24
+ exit!
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "webpacker/version"
4
+
5
+ namespace :webpacker do
6
+ desc "Provide information on Webpacker's environment"
7
+ task env: [:environment] do
8
+ $stdout.puts "Ruby: #{`ruby --version`}"
9
+ $stdout.puts "Rails: #{Rails.version}"
10
+ $stdout.puts "Webpacker: #{Webpacker::VERSION}"
11
+ $stdout.puts "Node: #{`node --version`}"
12
+ $stdout.puts "pnpm: #{`pnpm --version`}"
13
+
14
+ $stdout.puts "\n"
15
+ $stdout.puts "@rails/webpacker: \n#{`npm list @rails/webpacker version`}"
16
+
17
+ $stdout.puts "Is bin/webpack present?: #{File.exist? 'bin/webpack'}"
18
+ $stdout.puts "Is bin/webpack-dev-server present?: #{File.exist? 'bin/webpack-dev-server'}"
19
+ end
20
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ namespace :webpacker do
4
+ desc "Support for older Rails versions. Install all JavaScript dependencies as specified via pnpm"
5
+ task pnpm_install: [:environment] do
6
+ valid_node_envs = %w[test development production]
7
+
8
+ node_env = ENV.fetch("NODE_ENV") do
9
+ valid_node_envs.include?(Rails.env) ? Rails.env : "production"
10
+ end
11
+
12
+ system({ "NODE_ENV" => node_env }, "pnpm i --frozen-lockfile")
13
+ end
14
+ end
@@ -0,0 +1,106 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "test_helper"
4
+
5
+ module Webpacker
6
+ module PNPM
7
+ class RakeTasksTest < Test
8
+ def test_rake_tasks
9
+ output = chdir_concurrent(test_path, "bundle exec rake --tasks")
10
+ assert_includes output, "webpacker"
11
+ assert_includes output, "webpacker:binstubs"
12
+ assert_includes output, "webpacker:check_binstubs"
13
+ assert_includes output, "webpacker:check_node"
14
+ assert_includes output, "webpacker:check_pnpm"
15
+ assert_includes output, "webpacker:clean"
16
+ assert_includes output, "webpacker:clobber"
17
+ assert_includes output, "webpacker:compile"
18
+ assert_includes output, "webpacker:env"
19
+ assert_includes output, "webpacker:install"
20
+ assert_includes output, "webpacker:install:angular"
21
+ assert_includes output, "webpacker:install:coffee"
22
+ assert_includes output, "webpacker:install:elm"
23
+ assert_includes output, "webpacker:install:erb"
24
+ assert_includes output, "webpacker:install:react"
25
+ assert_includes output, "webpacker:install:svelte"
26
+ assert_includes output, "webpacker:install:stimulus"
27
+ assert_includes output, "webpacker:install:typescript"
28
+ assert_includes output, "webpacker:install:vue"
29
+ assert_includes output, "webpacker:pnpm_install"
30
+ assert_includes output, "webpacker:verify_install"
31
+
32
+ assert_not_includes output, "webpacker:check_yarn"
33
+ assert_not_includes output, "webpacker:yarn_install"
34
+ assert_not_includes output, "yarn:install"
35
+ end
36
+
37
+ def test_check_pnpm_version
38
+ output = chdir_concurrent(test_path, "rake webpacker:check_pnpm 2>&1")
39
+ assert_not_includes output, "pnpm is not installed"
40
+ assert_not_includes output, "Webpacker requires pnpm"
41
+
42
+ assert_includes output, "Verifying pnpm version..."
43
+ end
44
+
45
+ def test_override_check_yarn_version
46
+ output = chdir_concurrent(test_path, "rake webpacker:check_yarn 2>&1")
47
+ assert_not_includes output, "pnpm is not installed"
48
+ assert_not_includes output, "Webpacker requires pnpm"
49
+
50
+ assert_includes output, "Verifying pnpm version..."
51
+ end
52
+
53
+ def test_pnpm_install_in_production_env
54
+ cmd = "bundle exec rake webpacker:pnpm_install"
55
+
56
+ chdir_concurrent(test_path, cmd, { NODE_ENV: :production }, { isolated: true }) do |_, temp|
57
+ assert_not_includes installed_node_modules(temp), "right-pad", "Expected only production dependencies to be installed"
58
+ end
59
+ end
60
+
61
+ def test_pnpm_install_in_test_env
62
+ assert_includes test_app_dev_dependencies, "right-pad"
63
+
64
+ cmd = "bundle exec rake webpacker:pnpm_install"
65
+
66
+ chdir_concurrent(test_path, cmd, { NODE_ENV: :test }, { isolated: true }) do |_, temp|
67
+ assert_includes installed_node_modules(temp), "right-pad", "Expected dev dependencies to be installed"
68
+ end
69
+ end
70
+
71
+ def test_yarn_install_alias_in_production_env
72
+ cmd = "bundle exec rake webpacker:yarn_install"
73
+
74
+ chdir_concurrent(test_path, cmd, { NODE_ENV: :production }, { isolated: true }) do |_, temp|
75
+ assert_not_includes installed_node_modules(temp), "right-pad", "Expected only production dependencies to be installed"
76
+ end
77
+ end
78
+
79
+ def test_yarn_install_alias_in_test_env
80
+ assert_includes test_app_dev_dependencies, "right-pad"
81
+
82
+ cmd = "bundle exec rake webpacker:yarn_install"
83
+
84
+ chdir_concurrent(test_path, cmd, { NODE_ENV: :test }, { isolated: true }) do |_, temp|
85
+ assert_includes installed_node_modules(temp), "right-pad", "Expected dev dependencies to be installed"
86
+ end
87
+ end
88
+
89
+ private
90
+
91
+ def test_path
92
+ File.expand_path("test_app", __dir__)
93
+ end
94
+
95
+ def test_app_dev_dependencies
96
+ package_json = File.expand_path("package.json", test_path)
97
+ JSON.parse(File.read(package_json))["devDependencies"]
98
+ end
99
+
100
+ def installed_node_modules(dir)
101
+ node_modules_path = File.expand_path("node_modules", dir)
102
+ Dir.entries(node_modules_path)
103
+ end
104
+ end
105
+ end
106
+ end
@@ -0,0 +1,7 @@
1
+ /.bundle/
2
+ /coverage/
3
+ /doc/
4
+ /pkg/
5
+ /spec/reports/
6
+ /tmp/
7
+ /node_modules
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "config/application"
4
+
5
+ Rails.application.load_tasks
@@ -0,0 +1,10 @@
1
+ /* eslint no-console:0 */
2
+ // This file is automatically compiled by Webpack, along with any other files
3
+ // present in this directory. You're encouraged to place your actual application logic in
4
+ // a relevant structure within app/javascript and only use these pack files to reference
5
+ // that code so it'll be compiled.
6
+ //
7
+ // To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate
8
+ // layout file, like app/views/layouts/application.html.erb
9
+
10
+ console.log('"Hello Sanity" from webpacker-pnpm!')
@@ -0,0 +1,4 @@
1
+ /*
2
+ * Dummy file #1 for Multi File Entry points: https://webpack.js.org/guides/entry-advanced/
3
+ * This file must be named the same
4
+ */
@@ -0,0 +1,4 @@
1
+ /*
2
+ * Dummy file #2 for Multi File Entry points: https://webpack.js.org/guides/entry-advanced/
3
+ * This file must be named the same
4
+ */
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby.exe
2
+ # frozen_string_literal: true
3
+
4
+ APP_PATH = File.expand_path("../config/application", __dir__)
5
+ require_relative "../config/boot"
6
+ require "rails/commands"
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby.exe
2
+ # frozen_string_literal: true
3
+
4
+ require_relative "../config/boot"
5
+ require "rake"
6
+ Rake.application.run
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby.exe
2
+ # frozen_string_literal: true
3
+
4
+ require "fileutils"
5
+
6
+ # path to your application root.
7
+ APP_ROOT = File.expand_path("..", __dir__)
8
+
9
+ def system!(*args)
10
+ system(*args) || abort("\n== Command #{args} failed ==")
11
+ end
12
+
13
+ FileUtils.chdir APP_ROOT do
14
+ # This script is a way to setup or update your development environment automatically.
15
+ # This script is idempotent, so that you can run it at anytime and get an expectable outcome.
16
+ # Add necessary setup steps to this file.
17
+
18
+ puts "== Installing dependencies =="
19
+ system! "gem install bundler --conservative"
20
+ system("bundle check") || system!("bundle install")
21
+
22
+ puts "\n== Removing old logs and tempfiles =="
23
+ system! "bin/rails log:clear tmp:clear"
24
+
25
+ puts "\n== Restarting application server =="
26
+ system! "bin/rails restart"
27
+ end
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
5
+ ENV["NODE_ENV"] ||= ENV["RAILS_ENV"]
6
+
7
+ require "pathname"
8
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath)
9
+
10
+ require "bundler/setup"
11
+
12
+ require "webpacker"
13
+ require "webpacker/webpack_runner"
14
+ Webpacker::WebpackRunner.run(ARGV)
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ ENV["RAILS_ENV"] ||= ENV["RACK_ENV"] || "development"
5
+ ENV["NODE_ENV"] ||= ENV["RAILS_ENV"]
6
+
7
+ require "pathname"
8
+ ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", Pathname.new(__FILE__).realpath)
9
+
10
+ require "bundler/setup"
11
+
12
+ require "webpacker"
13
+ require "webpacker/dev_server_runner"
14
+ Webpacker::DevServerRunner.run(ARGV)
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file allows the `Rails.root` to be correctly determined.
4
+
5
+ require_relative "config/environment"
6
+
7
+ run Rails.application
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "action_controller/railtie"
4
+ require "action_view/railtie"
5
+ require "webpacker"
6
+ require "webpacker/pnpm"
7
+
8
+ module TestApp
9
+ class Application < ::Rails::Application
10
+ config.secret_key_base = "abcdef"
11
+ config.eager_load = true
12
+ end
13
+ end
File without changes
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "application"
4
+
5
+ Rails.backtrace_cleaner.remove_silencers!
6
+ Rails.application.initialize!
@@ -0,0 +1,3 @@
1
+ const { environment } = require('@rails/webpacker')
2
+
3
+ module.exports = environment
@@ -0,0 +1,96 @@
1
+ # Note: You must restart bin/webpack-dev-server for changes to take effect
2
+
3
+ default: &default
4
+ source_path: app/javascript
5
+ source_entry_path: packs
6
+ public_root_path: public
7
+ public_output_path: packs
8
+ cache_path: tmp/cache/webpacker
9
+ webpack_compile_output: false
10
+
11
+ # Additional paths webpack should lookup modules
12
+ # ['app/assets', 'engine/foo/app/assets']
13
+ resolved_paths: []
14
+
15
+ # Reload manifest.json on all requests so we reload latest compiled packs
16
+ cache_manifest: false
17
+
18
+ # Extract and emit a css file
19
+ extract_css: false
20
+
21
+ static_assets_extensions:
22
+ - .jpg
23
+ - .jpeg
24
+ - .png
25
+ - .gif
26
+ - .tiff
27
+ - .ico
28
+ - .svg
29
+
30
+ extensions:
31
+ - .vue
32
+ - .mjs
33
+ - .js
34
+ - .sass
35
+ - .scss
36
+ - .css
37
+ - .module.sass
38
+ - .module.scss
39
+ - .module.css
40
+ - .png
41
+ - .svg
42
+ - .gif
43
+ - .jpeg
44
+ - .jpg
45
+
46
+ development:
47
+ <<: *default
48
+ compile: true
49
+
50
+ # Reference: https://webpack.js.org/configuration/dev-server/
51
+ dev_server:
52
+ https: false
53
+ host: localhost
54
+ port: 3035
55
+ public: localhost:3035
56
+ hmr: false
57
+ # Inline should be set to true if using HMR
58
+ inline: true
59
+ overlay: true
60
+ disable_host_check: true
61
+ use_local_ip: false
62
+ pretty: false
63
+
64
+ test:
65
+ <<: *default
66
+ compile: true
67
+
68
+ # Compile test packs to a separate directory
69
+ public_output_path: packs-test
70
+
71
+ production:
72
+ <<: *default
73
+
74
+ # Production depends on precompilation of packs prior to booting for performance.
75
+ compile: false
76
+
77
+ # Extract and emit a css file
78
+ extract_css: true
79
+
80
+ # Cache manifest.json for performance
81
+ cache_manifest: true
82
+
83
+ staging:
84
+ <<: *default
85
+
86
+ # Production depends on precompilation of packs prior to booting for performance.
87
+ compile: false
88
+
89
+ # Extract and emit a css file
90
+ extract_css: true
91
+
92
+ # Cache manifest.json for performance
93
+ cache_manifest: true
94
+
95
+ # Compile staging packs to a separate directory
96
+ public_output_path: packs-staging
@@ -0,0 +1,19 @@
1
+ # Note: You must restart bin/webpack-dev-server for changes to take effect
2
+
3
+ default: &default
4
+ public_root_path: ../public
5
+
6
+ development:
7
+ <<: *default
8
+ compile: true
9
+
10
+ test:
11
+ <<: *default
12
+ compile: true
13
+ public_output_path: packs-test
14
+
15
+ production:
16
+ <<: *default
17
+ compile: false
18
+ extract_css: true
19
+ cache_manifest: true
@@ -0,0 +1,13 @@
1
+ {
2
+ "name": "test_app",
3
+ "version": "1.0.0",
4
+ "main": "index.js",
5
+ "license": "CC-BY-NC-SA-4.0",
6
+ "private": true,
7
+ "dependencies": {
8
+ "left-pad": "^1.2.0"
9
+ },
10
+ "devDependencies": {
11
+ "right-pad": "^1.0.1"
12
+ }
13
+ }
@@ -0,0 +1,20 @@
1
+ dependencies:
2
+ left-pad: 1.3.0
3
+ devDependencies:
4
+ right-pad: 1.0.1
5
+ lockfileVersion: 5.1
6
+ packages:
7
+ /left-pad/1.3.0:
8
+ deprecated: use String.prototype.padStart()
9
+ dev: false
10
+ resolution:
11
+ integrity: sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==
12
+ /right-pad/1.0.1:
13
+ dev: true
14
+ engines:
15
+ node: '>= 0.10'
16
+ resolution:
17
+ integrity: sha1-jKCMLLtbVedNr6lr9/0aJ9VoyNA=
18
+ specifiers:
19
+ left-pad: ^1.2.0
20
+ right-pad: ^1.0.1
@@ -0,0 +1,31 @@
1
+ {
2
+ "bootstrap.css": "/packs/bootstrap-c38deda30895059837cf.css",
3
+ "application.css": "/packs/application-dd6b1cd38bfa093df600.css",
4
+ "bootstrap.js": "/packs/bootstrap-300631c4f0e0f9c865bc.js",
5
+ "application.js": "/packs/application-k344a6d59eef8632c9d1.js",
6
+ "application.png": "/packs/application-k344a6d59eef8632c9d1.png",
7
+ "fonts/fa-regular-400.woff2": "/packs/fonts/fa-regular-400-944fb546bd7018b07190a32244f67dc9.woff2",
8
+ "media/images/image.jpg": "/packs/media/images/image-c38deda30895059837cf.jpg",
9
+ "media/images/nested/image.jpg": "/packs/media/images/nested/image-c38deda30895059837cf.jpg",
10
+ "media/images/mb-icon.png": "/packs/media/images/mb-icon-c38deda30895059837cf.png",
11
+ "media/images/nested/mb-icon.png": "/packs/media/images/nested/mb-icon-c38deda30895059837cf.png",
12
+ "entrypoints": {
13
+ "application": {
14
+ "js": [
15
+ "/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js",
16
+ "/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js",
17
+ "/packs/application-k344a6d59eef8632c9d1.js"
18
+ ],
19
+ "css": [
20
+ "/packs/1-c20632e7baf2c81200d3.chunk.css",
21
+ "/packs/application-k344a6d59eef8632c9d1.chunk.css"
22
+ ]
23
+ },
24
+ "hello_stimulus": {
25
+ "css": [
26
+ "/packs/1-c20632e7baf2c81200d3.chunk.css",
27
+ "/packs/hello_stimulus-k344a6d59eef8632c9d1.chunk.css"
28
+ ]
29
+ }
30
+ }
31
+ }
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails"
4
+ require "rails/test_help"
5
+ require "etc"
6
+ require "fileutils"
7
+ require "open3"
8
+
9
+ require_relative "test_app/config/environment"
10
+
11
+ Rails.env = "production"
12
+ Webpacker.instance = ::Webpacker::Instance.new
13
+
14
+ module Webpacker
15
+ module PNPM
16
+ class Test < ActiveSupport::TestCase
17
+ # force test parallelization - this is not about test speed, it is about
18
+ # maximizing the likelihood of having tests fail by providing isolated
19
+ # execution threads. manually specify the number of workers, as by default
20
+ # Rails uses the number of physical, not logical, cores. Additionally,
21
+ # spawn threads rather than fork processes as Rails' DRb implementation
22
+ # only supports UNIX systems
23
+ Minitest.parallel_executor = Minitest::Parallel::Executor.new(Etc.nprocessors)
24
+ parallelize_me!
25
+
26
+ protected
27
+
28
+ # concurrent scoped chdir calls are not supported, as they can cause
29
+ # unforeseen and unpredictable bugs. instead, allow copying the desired
30
+ # directory to a temp directory before performing possible filesystem
31
+ # manipulations. opts are passed through to Open3::capture2e
32
+ def chdir_concurrent(dir, cmd, env = {}, opts = {})
33
+ # Process::spawn requires an env hash of strings
34
+ env.stringify_keys!
35
+ env.transform_values!(&:to_s)
36
+
37
+ env = ENV.to_h.merge(env)
38
+ isolated = opts.delete(:isolated)
39
+ output = nil
40
+
41
+ begin
42
+ # if we're want an isolated environment, copy the directory contents to
43
+ # a new temporary directory and change the working directory to it
44
+ if isolated
45
+ files = Dir[File.join(dir, "*")].reject do |f|
46
+ f.include?("node_modules")
47
+ end
48
+
49
+ dir = Dir.mktmpdir
50
+ FileUtils.cp_r(files, dir)
51
+ end
52
+
53
+ output, = Open3.capture2e(env, "cd #{dir} && #{cmd}", opts)
54
+ yield(output, dir) if block_given?
55
+ ensure
56
+ # make sure we remove the generated temp directory
57
+ FileUtils.remove_entry_secure(dir) if isolated
58
+ end
59
+
60
+ output
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path("lib", __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "webpacker/pnpm/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "webpacker-pnpm"
9
+ spec.version = Webpacker::PNPM::VERSION
10
+ spec.authors = ["Elias Gabriel"]
11
+ spec.email = ["me@eliasfgabriel.com"]
12
+ spec.summary = "Replaces Webpacker's Yarn environment with pnpm"
13
+ spec.homepage = "https://github.com/thearchitector/webpacker-pnpm"
14
+ spec.license = "CC-BY-NC-SA-4.0"
15
+
16
+ spec.metadata = {
17
+ "homepage_uri" => spec.homepage,
18
+ "source_code_uri" => "https://github.com/thearchitector/webpacker-pnpm/tree/v#{Webpacker::PNPM::VERSION}",
19
+ "changelog_uri" => "https://github.com/thearchitector/webpacker-pnpm/blob/v#{Webpacker::PNPM::VERSION}/CHANGELOG.md"
20
+ }
21
+
22
+ spec.required_ruby_version = ">= 2.4.0"
23
+
24
+ spec.add_dependency "activesupport", ">= 5.2"
25
+ spec.add_dependency "rack-proxy", ">= 0.6.1"
26
+ spec.add_dependency "railties", ">= 5.2"
27
+ spec.add_dependency "semantic_range", ">= 2.3.0"
28
+ spec.add_dependency "webpacker", "~> 5.x"
29
+
30
+ spec.add_development_dependency "bundler", "~> 2.0"
31
+ spec.add_development_dependency "rubocop"
32
+ spec.add_development_dependency "rubocop-rails"
33
+
34
+ spec.files = `git ls-files`.split("\n")
35
+ spec.test_files = `git ls-files -- test/*`.split("\n")
36
+ end
metadata ADDED
@@ -0,0 +1,226 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webpacker-pnpm
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.2.0
5
+ platform: ruby
6
+ authors:
7
+ - Elias Gabriel
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2020-05-14 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '5.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '5.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rack-proxy
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.6.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.6.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: railties
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '5.2'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '5.2'
55
+ - !ruby/object:Gem::Dependency
56
+ name: semantic_range
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: 2.3.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: 2.3.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: webpacker
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 5.x
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 5.x
83
+ - !ruby/object:Gem::Dependency
84
+ name: bundler
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: rubocop-rails
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ description:
126
+ email:
127
+ - me@eliasfgabriel.com
128
+ executables: []
129
+ extensions: []
130
+ extra_rdoc_files: []
131
+ files:
132
+ - ".gitattributes"
133
+ - ".gitignore"
134
+ - ".rubocop.yml"
135
+ - ".travis.yml"
136
+ - CHANGELOG.md
137
+ - Gemfile
138
+ - README.md
139
+ - Rakefile
140
+ - bin/console
141
+ - bin/setup
142
+ - gemfiles/Gemfile-rails-edge
143
+ - gemfiles/Gemfile-rails.5.2.x
144
+ - gemfiles/Gemfile-rails.6.0.x
145
+ - lib/webpacker/pnpm.rb
146
+ - lib/webpacker/pnpm/patches.rb
147
+ - lib/webpacker/pnpm/railtie.rb
148
+ - lib/webpacker/pnpm/version.rb
149
+ - lib/webpacker/tasks/check_pnpm.rake
150
+ - lib/webpacker/tasks/env.rake
151
+ - lib/webpacker/tasks/pnpm_install.rake
152
+ - test/rake_tasks_test.rb
153
+ - test/test_app/.gitignore
154
+ - test/test_app/Rakefile
155
+ - test/test_app/app/javascript/packs/application.js
156
+ - test/test_app/app/javascript/packs/multi_entry.css
157
+ - test/test_app/app/javascript/packs/multi_entry.js
158
+ - test/test_app/bin/rails
159
+ - test/test_app/bin/rake
160
+ - test/test_app/bin/setup
161
+ - test/test_app/bin/webpack
162
+ - test/test_app/bin/webpack-dev-server
163
+ - test/test_app/config.ru
164
+ - test/test_app/config/application.rb
165
+ - test/test_app/config/boot.rb
166
+ - test/test_app/config/environment.rb
167
+ - test/test_app/config/webpack/development.js
168
+ - test/test_app/config/webpack/environment.js
169
+ - test/test_app/config/webpacker.yml
170
+ - test/test_app/config/webpacker_public_root.yml
171
+ - test/test_app/package.json
172
+ - test/test_app/pnpm-lock.yaml
173
+ - test/test_app/public/packs/manifest.json
174
+ - test/test_helper.rb
175
+ - webpacker-pnpm.gemspec
176
+ homepage: https://github.com/thearchitector/webpacker-pnpm
177
+ licenses:
178
+ - CC-BY-NC-SA-4.0
179
+ metadata:
180
+ homepage_uri: https://github.com/thearchitector/webpacker-pnpm
181
+ source_code_uri: https://github.com/thearchitector/webpacker-pnpm/tree/v1.2.0
182
+ changelog_uri: https://github.com/thearchitector/webpacker-pnpm/blob/v1.2.0/CHANGELOG.md
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: 2.4.0
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.7.6.2
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Replaces Webpacker's Yarn environment with pnpm
203
+ test_files:
204
+ - test/rake_tasks_test.rb
205
+ - test/test_app/.gitignore
206
+ - test/test_app/Rakefile
207
+ - test/test_app/app/javascript/packs/application.js
208
+ - test/test_app/app/javascript/packs/multi_entry.css
209
+ - test/test_app/app/javascript/packs/multi_entry.js
210
+ - test/test_app/bin/rails
211
+ - test/test_app/bin/rake
212
+ - test/test_app/bin/setup
213
+ - test/test_app/bin/webpack
214
+ - test/test_app/bin/webpack-dev-server
215
+ - test/test_app/config.ru
216
+ - test/test_app/config/application.rb
217
+ - test/test_app/config/boot.rb
218
+ - test/test_app/config/environment.rb
219
+ - test/test_app/config/webpack/development.js
220
+ - test/test_app/config/webpack/environment.js
221
+ - test/test_app/config/webpacker.yml
222
+ - test/test_app/config/webpacker_public_root.yml
223
+ - test/test_app/package.json
224
+ - test/test_app/pnpm-lock.yaml
225
+ - test/test_app/public/packs/manifest.json
226
+ - test/test_helper.rb