vite_rails 1.0.7 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/CONTRIBUTING.md +0 -1
- data/README.md +34 -8
- data/lib/install/config/vite.config.ts +0 -3
- data/lib/install/javascript/entrypoints/application.js +8 -4
- data/lib/install/template.rb +3 -3
- data/lib/tasks/vite/build.rake +12 -6
- data/lib/tasks/vite/clean.rake +1 -3
- data/lib/tasks/vite/install_dependencies.rake +3 -9
- data/lib/tasks/vite/verify_install.rake +3 -3
- data/lib/vite_rails.rb +23 -34
- data/lib/vite_rails/builder.rb +11 -13
- data/lib/vite_rails/commands.rb +51 -10
- data/lib/vite_rails/config.rb +70 -35
- data/lib/vite_rails/dev_server_proxy.rb +26 -18
- data/lib/vite_rails/helper.rb +14 -10
- data/lib/vite_rails/manifest.rb +27 -22
- data/lib/vite_rails/runner.rb +3 -6
- data/lib/vite_rails/version.rb +1 -1
- data/package.json +9 -2
- data/package/default.vite.json +2 -1
- data/test/builder_test.rb +27 -22
- data/test/commands_test.rb +67 -0
- data/test/config_test.rb +133 -0
- data/test/dev_server_proxy_test.rb +102 -0
- data/test/dev_server_test.rb +0 -30
- data/test/engine_rake_tasks_test.rb +56 -17
- data/test/helper_test.rb +40 -103
- data/test/manifest_test.rb +39 -29
- data/test/mode_test.rb +6 -11
- data/test/mounted_app/test/dummy/config/vite.json +5 -11
- data/test/mounted_app/test/dummy/package.json +5 -4
- data/test/mounted_app/test/dummy/yarn.lock +208 -0
- data/test/rake_tasks_test.rb +7 -21
- data/test/runner_test.rb +31 -0
- data/test/test_app/app/frontend/entrypoints/application.js +2 -0
- data/test/test_app/config/vite.json +0 -2
- data/test/test_app/config/vite_additional_paths.json +5 -0
- data/test/test_app/config/vite_public_dir.json +5 -0
- data/test/test_app/public/vite-production/manifest-assets.json +10 -0
- data/test/test_app/public/vite-production/manifest.json +39 -0
- data/test/test_helper.rb +48 -14
- metadata +25 -25
- data/test/command_test.rb +0 -35
- data/test/configuration_test.rb +0 -80
- data/test/dev_server_runner_test.rb +0 -83
- data/test/test_app/app/javascript/entrypoints/application.js +0 -10
- data/test/test_app/app/javascript/entrypoints/multi_entry.css +0 -4
- data/test/test_app/app/javascript/entrypoints/multi_entry.js +0 -4
- data/test/test_app/config/vite_public_root.yml +0 -20
- data/test/test_app/public/vite/manifest.json +0 -36
- data/test/vite_runner_test.rb +0 -59
- data/test/webpacker_test.rb +0 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 57f866deafddde5401e02ec27cf751eb26a40a0be1fd832d9d3813fd7a69e721
|
4
|
+
data.tar.gz: 7cf22c583a3ac70f4353e227b0da4463b42067dd38f0c36774e665e619b31f2d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d101294de0e6f585b7df56c2881c465698f4c6ccbe8c4220117d7119c84f21e8b80e6aa2865dd353fa27b3b2c3d7a78095e80466c2d9b5f6eda60b6073a55ed0
|
7
|
+
data.tar.gz: fdbe92f7afafd6f82bafc6525a4099151efcdc385ce49e5cc5f696ea79efe5d411b6eaf093b9b1ec1402140a7d4ac34f629401fb70d9005535eaf38e989cf4cd
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,28 @@
|
|
1
|
+
## Vite Rails 1.0.12 (2020-01-29)
|
2
|
+
|
3
|
+
- Add support for Vite 2.0.0-beta.56, which modified the manifest to output a `css` field in the manifest.
|
4
|
+
- Start generating an assets manifest, since 2.0.0-beta.51 stopped including non-JS entrypoints in the manifest.
|
5
|
+
|
6
|
+
## Vite Rails 1.0.11 (2020-01-24)
|
7
|
+
|
8
|
+
- Fix bug in `assetHost` that caused `base` to be configured incorrectly.
|
9
|
+
- Allow installing `vite` and `vite-plugin-ruby` as devDependencies, and install them when precompiling assets.
|
10
|
+
- Move `base` to the configuration root after Vite's update in beta.38
|
11
|
+
|
12
|
+
## Vite Rails 1.0.10 (2020-01-23)
|
13
|
+
|
14
|
+
- Use `path_to_asset` in `vite_asset_path` so that it's prefixed automatically
|
15
|
+
when using a CDN (`config.action_controller.asset_host`).
|
16
|
+
|
17
|
+
## Vite Rails 1.0.9 (2020-01-22)
|
18
|
+
|
19
|
+
- Ensure `configPath` and `publicDir` are scoped from `root`, both in Ruby and JS.
|
20
|
+
|
21
|
+
## Vite Rails 1.0.8 (2020-01-21)
|
22
|
+
|
23
|
+
- Change the default of `sourceCodeDir` to `app/frontend`, add instructions for folks migrating
|
24
|
+
from a `app/javascript` structure.
|
25
|
+
|
1
26
|
## Vite Rails 1.0.7 (2020-01-20)
|
2
27
|
|
3
28
|
- Add `vite_client_tag` to ensure the Vite client can be loaded in apps that don't use any imports.
|
data/CONTRIBUTING.md
CHANGED
data/README.md
CHANGED
@@ -1,15 +1,26 @@
|
|
1
1
|
<h1 align="center">
|
2
|
-
|
2
|
+
<a href="https://vite-rails.netlify.app/">
|
3
|
+
<img src="https://raw.githubusercontent.com/ElMassimo/vite_rails/main/docs/public/logo.svg" width="120px"/>
|
4
|
+
</a>
|
5
|
+
|
6
|
+
<br>
|
7
|
+
|
8
|
+
<a href="https://vite-rails.netlify.app/">
|
9
|
+
Vite Rails
|
10
|
+
</a>
|
11
|
+
|
12
|
+
<br>
|
13
|
+
|
3
14
|
<p align="center">
|
4
|
-
|
15
|
+
<a href="https://github.com/ElMassimo/vite_rails/actions">
|
5
16
|
<img alt="Build Status" src="https://github.com/ElMassimo/vite_rails/workflows/build/badge.svg"/>
|
6
|
-
</a>
|
7
|
-
|
17
|
+
</a>
|
18
|
+
<a href="https://codeclimate.com/github/ElMassimo/vite_rails">
|
8
19
|
<img alt="Maintainability" src="https://codeclimate.com/github/ElMassimo/vite_rails/badges/gpa.svg"/>
|
9
20
|
</a>
|
10
21
|
<a href="https://codeclimate.com/github/ElMassimo/vite_rails">
|
11
22
|
<img alt="Test Coverage" src="https://codeclimate.com/github/ElMassimo/vite_rails/badges/coverage.svg"/>
|
12
|
-
</a>
|
23
|
+
</a>
|
13
24
|
<a href="https://rubygems.org/gems/vite_rails">
|
14
25
|
<img alt="Gem Version" src="https://img.shields.io/gem/v/vite_rails.svg?colorB=e9573f"/>
|
15
26
|
</a>
|
@@ -20,6 +31,7 @@
|
|
20
31
|
</h1>
|
21
32
|
|
22
33
|
[website]: https://vite-rails.netlify.app/
|
34
|
+
[configuration reference]: https://vite-rails.netlify.app/config/
|
23
35
|
[features]: https://vite-rails.netlify.app/guide/introduction.html
|
24
36
|
[guides]: https://vite-rails.netlify.app/guide/
|
25
37
|
[config]: https://vite-rails.netlify.app/config/
|
@@ -27,14 +39,20 @@
|
|
27
39
|
[webpacker]: https://github.com/rails/webpacker
|
28
40
|
[vite]: http://vitejs.dev/
|
29
41
|
[config file]: https://github.com/ElMassimo/vite_rails/blob/main/package/default.vite.json
|
42
|
+
[example app]: https://github.com/ElMassimo/vite_rails/tree/main/examples/blog
|
43
|
+
[heroku]: https://vite-rails-demo.herokuapp.com/
|
44
|
+
[Issues]: https://github.com/ElMassimo/vite_rails/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc
|
45
|
+
[Discussions]: https://github.com/ElMassimo/vite_rails/discussions
|
30
46
|
|
31
47
|
[__Vite Rails__][vite_rails] allows you to use [Vite] to power the frontend of your Rails app.
|
32
48
|
|
33
49
|
[Vite] is to frontend tooling as Ruby to programming, pure joy! 😍
|
34
50
|
|
51
|
+
Check an [example app] running on [Heroku].
|
52
|
+
|
35
53
|
## Features ⚡️
|
36
54
|
|
37
|
-
-
|
55
|
+
- 💡 Instant server start
|
38
56
|
- ⚡️ Blazing fast hot reload
|
39
57
|
- 🚀 Zero-config deployments
|
40
58
|
- 🤝 Integrated with <kbd>assets:precompile</kbd>
|
@@ -65,7 +83,7 @@ Additional installation instructions are available in the [documentation website
|
|
65
83
|
|
66
84
|
## Getting Started 💻
|
67
85
|
|
68
|
-
Restart your Rails server, and then run
|
86
|
+
Restart your Rails server, and then run <kbd>bin/vite</kbd> to start the Vite development server.
|
69
87
|
|
70
88
|
Add the following your `views/layouts/application.html.erb`:
|
71
89
|
|
@@ -78,9 +96,17 @@ Visit any page and you should see a printed console output: `Vite ⚡️ Rails`.
|
|
78
96
|
|
79
97
|
For more [guides] and a full [configuration reference], check the [documentation website][website].
|
80
98
|
|
81
|
-
##
|
99
|
+
## Contact ✉️
|
100
|
+
|
101
|
+
Please use [Issues] to report bugs you find, and [Discussions] to make feature requests or get help.
|
102
|
+
|
103
|
+
Don't hesitate to _⭐️ star the project_ if you find it useful!
|
104
|
+
|
105
|
+
|
106
|
+
## Special Thanks 🙏
|
82
107
|
|
83
108
|
- [webpacker]
|
109
|
+
- [vite]
|
84
110
|
|
85
111
|
## License
|
86
112
|
|
@@ -1,3 +1,10 @@
|
|
1
|
+
// To see this message, add the following to the `<head>` section in your
|
2
|
+
// views/layouts/application.html.erb
|
3
|
+
//
|
4
|
+
// <%= vite_client_tag %>
|
5
|
+
// <%= vite_javascript_tag 'application' %>
|
6
|
+
console.log('Vite ⚡️ Rails')
|
7
|
+
|
1
8
|
// Example: Load Rails libraries in Vite.
|
2
9
|
//
|
3
10
|
// import '@rails/ujs'
|
@@ -11,8 +18,5 @@
|
|
11
18
|
// Turbolinks.start()
|
12
19
|
// ActiveStorage.start()
|
13
20
|
|
14
|
-
// Example: Import a stylesheet in app/
|
21
|
+
// Example: Import a stylesheet in app/frontend/index.css
|
15
22
|
// import '~/index.css'
|
16
|
-
|
17
|
-
console.log('Vite ⚡️ Rails')
|
18
|
-
|
data/lib/install/template.rb
CHANGED
@@ -6,7 +6,7 @@ copy_file "#{ __dir__ }/config/vite.json", ViteRails.config.config_path
|
|
6
6
|
copy_file "#{ __dir__ }/config/vite.config.ts", Rails.root.join('vite.config.ts')
|
7
7
|
|
8
8
|
say 'Creating entrypoints directory'
|
9
|
-
directory "#{ __dir__ }/javascript/entrypoints", ViteRails.config.
|
9
|
+
directory "#{ __dir__ }/javascript/entrypoints", ViteRails.config.resolved_entrypoints_dir
|
10
10
|
|
11
11
|
apply "#{ __dir__ }/binstubs.rb"
|
12
12
|
|
@@ -33,8 +33,8 @@ Dir.chdir(Rails.root) do
|
|
33
33
|
vite_version = package_json.match(/"vite": "(.*)"/)[1]
|
34
34
|
plugin_version = package_json.match(/"vite-plugin-ruby": "(.*)"/)[1]
|
35
35
|
|
36
|
-
say 'Installing vite as
|
37
|
-
run "yarn add vite@#{ vite_version } vite-plugin-ruby@#{ plugin_version }"
|
36
|
+
say 'Installing vite as build dependencies'
|
37
|
+
run "yarn add -D vite@#{ vite_version } vite-plugin-ruby@#{ plugin_version }"
|
38
38
|
end
|
39
39
|
|
40
40
|
say 'Vite ⚡️ Rails successfully installed! 🎉', :green
|
data/lib/tasks/vite/build.rake
CHANGED
@@ -3,21 +3,27 @@
|
|
3
3
|
$stdout.sync = true
|
4
4
|
|
5
5
|
def enhance_assets_precompile
|
6
|
+
# Before installing
|
7
|
+
['yarn:install', 'webpacker:yarn_install'].each do |name|
|
8
|
+
Rake::Task[name].enhance([:'vite:set_node_env']) if Rake::Task.task_defined?(name)
|
9
|
+
end
|
10
|
+
|
11
|
+
# After precompiling
|
6
12
|
Rake::Task['assets:precompile'].enhance do |task|
|
7
13
|
prefix = task.name.split(/#|assets:precompile/).first
|
8
|
-
|
9
14
|
Rake::Task["#{ prefix }vite:build"].invoke
|
10
15
|
end
|
11
16
|
end
|
12
17
|
|
13
18
|
namespace :vite do
|
19
|
+
desc 'Fixes Rails management of node dev dependencies (build dependencies)'
|
20
|
+
task :set_node_env do
|
21
|
+
ENV['NODE_ENV'] = 'development'
|
22
|
+
end
|
23
|
+
|
14
24
|
desc 'Compile JavaScript packs using vite for production with digests'
|
15
25
|
task build: [:'vite:verify_install', :environment] do
|
16
|
-
ViteRails.
|
17
|
-
ViteRails.ensure_log_goes_to_stdout do
|
18
|
-
ViteRails.build || exit!
|
19
|
-
end
|
20
|
-
end
|
26
|
+
ViteRails.build_from_rake
|
21
27
|
end
|
22
28
|
end
|
23
29
|
|
data/lib/tasks/vite/clean.rake
CHANGED
@@ -5,9 +5,7 @@ $stdout.sync = true
|
|
5
5
|
namespace :vite do
|
6
6
|
desc 'Remove old compiled vites'
|
7
7
|
task :clean, [:keep, :age] => [:'vite:verify_install', :environment] do |_, args|
|
8
|
-
ViteRails.
|
9
|
-
ViteRails.clean(keep_up_to: Integer(args.keep || 2), age_in_seconds: Integer(args.age || 3600))
|
10
|
-
end
|
8
|
+
ViteRails.clean_from_rake(args)
|
11
9
|
end
|
12
10
|
end
|
13
11
|
|
@@ -1,19 +1,13 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
namespace :vite do
|
4
|
-
desc '
|
4
|
+
desc 'Install all JavaScript dependencies as specified via Yarn'
|
5
5
|
task :install_dependencies do
|
6
6
|
valid_node_envs = %w[test development production]
|
7
7
|
node_env = ENV.fetch('NODE_ENV') { valid_node_envs.include?(Rails.env) ? Rails.env : 'production' }
|
8
8
|
Dir.chdir(Rails.root) do
|
9
|
-
|
10
|
-
|
11
|
-
"yarn install #{ v1 ? '--no-progress --frozen-lockfile' : '--immutable' }"
|
12
|
-
elsif Rails.root.join('pnpm-lock.yaml').exist?
|
13
|
-
'pnpm install'
|
14
|
-
else
|
15
|
-
'npm ci'
|
16
|
-
end
|
9
|
+
v1 = `yarn --version`.start_with?('1')
|
10
|
+
install_command = "yarn install #{ v1 ? '--no-progress --frozen-lockfile' : '--immutable' } --production=false"
|
17
11
|
system({ 'NODE_ENV' => node_env }, install_command)
|
18
12
|
end
|
19
13
|
end
|
@@ -11,10 +11,10 @@ namespace :vite do
|
|
11
11
|
WARN
|
12
12
|
exit!
|
13
13
|
end
|
14
|
-
|
15
|
-
|
14
|
+
config_path = Rails.root.join(ViteRails.config.config_path)
|
15
|
+
unless config_path.exist?
|
16
16
|
warn <<~WARN
|
17
|
-
Configuration #{
|
17
|
+
Configuration #{ config_path } file for vite-plugin-ruby not found.
|
18
18
|
Make sure vite:install has run successfully before running dependent tasks.
|
19
19
|
WARN
|
20
20
|
exit!
|
data/lib/vite_rails.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require '
|
4
|
-
require 'active_support/
|
3
|
+
require 'rails'
|
4
|
+
require 'active_support/all'
|
5
5
|
|
6
6
|
require 'zeitwerk'
|
7
7
|
loader = Zeitwerk::Loader.for_gem
|
@@ -13,18 +13,10 @@ class ViteRails
|
|
13
13
|
# Internal: Prefix used for environment variables that modify the configuration.
|
14
14
|
ENV_PREFIX = 'VITE_RUBY'
|
15
15
|
|
16
|
-
# Public: Additional environment variables to pass to Vite.
|
17
|
-
#
|
18
|
-
# Example:
|
19
|
-
# ViteRails.env['VITE_RUBY_CONFIG_PATH'] = 'config/alternate_vite.json'
|
20
|
-
cattr_accessor(:env) { ENV.select { |key, _| key.start_with?(ENV_PREFIX) } }
|
21
|
-
|
22
|
-
cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
|
23
|
-
|
24
16
|
class << self
|
25
|
-
delegate :config, :builder, :manifest, :commands, :dev_server, :dev_server_running?, to: :instance
|
17
|
+
delegate :config, :builder, :manifest, :commands, :dev_server, :dev_server_running?, :run_proxy?, to: :instance
|
26
18
|
delegate :mode, to: :config
|
27
|
-
delegate :bootstrap, :clean, :clobber, :build, to: :commands
|
19
|
+
delegate :bootstrap, :clean, :clean_from_rake, :clobber, :build, :build_from_rake, to: :commands
|
28
20
|
|
29
21
|
attr_writer :instance
|
30
22
|
|
@@ -37,34 +29,31 @@ class ViteRails
|
|
37
29
|
ViteRails::Runner.new(args).run
|
38
30
|
end
|
39
31
|
|
40
|
-
#
|
41
|
-
def
|
42
|
-
|
43
|
-
rescue StandardError => error
|
44
|
-
logger.error("Failed to check mode for Vite: #{ error.message }")
|
45
|
-
false
|
32
|
+
# Internal: Allows to obtain any env variables for configuration options.
|
33
|
+
def load_env_variables
|
34
|
+
ENV.select { |key, _| key.start_with?(ENV_PREFIX) }
|
46
35
|
end
|
36
|
+
end
|
47
37
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
ENV['NODE_ENV'] = original
|
54
|
-
end
|
38
|
+
# Public: Additional environment variables to pass to Vite.
|
39
|
+
#
|
40
|
+
# Example:
|
41
|
+
# ViteRails.env['VITE_RUBY_CONFIG_PATH'] = 'config/alternate_vite.json'
|
42
|
+
cattr_accessor(:env) { load_env_variables }
|
55
43
|
|
56
|
-
|
57
|
-
old_logger = ViteRails.logger
|
58
|
-
ViteRails.logger = ActiveSupport::Logger.new(STDOUT)
|
59
|
-
yield
|
60
|
-
ensure
|
61
|
-
ViteRails.logger = old_logger
|
62
|
-
end
|
63
|
-
end
|
44
|
+
cattr_accessor(:logger) { ActiveSupport::TaggedLogging.new(ActiveSupport::Logger.new(STDOUT)) }
|
64
45
|
|
65
46
|
# Public: Returns true if the Vite development server is running.
|
66
47
|
def dev_server_running?
|
67
|
-
|
48
|
+
run_proxy? && dev_server.running?
|
49
|
+
end
|
50
|
+
|
51
|
+
# Public: The proxy for assets should only run in development mode.
|
52
|
+
def run_proxy?
|
53
|
+
config.mode == 'development'
|
54
|
+
rescue StandardError => error
|
55
|
+
ViteRails.logger.error("Failed to check mode for Vite: #{ error.message }")
|
56
|
+
false
|
68
57
|
end
|
69
58
|
|
70
59
|
# Public: Current instance configuration for Vite.
|
data/lib/vite_rails/builder.rb
CHANGED
@@ -67,9 +67,18 @@ private
|
|
67
67
|
def build_with_vite
|
68
68
|
logger.info 'Building with Vite ⚡️'
|
69
69
|
|
70
|
-
|
71
|
-
|
70
|
+
command = "#{ which_ruby } ./bin/vite build --mode #{ config.mode }"
|
71
|
+
stdout, stderr, status = Open3.capture3(ViteRails.config.to_env, command, chdir: File.expand_path(config.root))
|
72
72
|
|
73
|
+
log_build_result(stdout, stderr, status)
|
74
|
+
|
75
|
+
status.success?
|
76
|
+
end
|
77
|
+
|
78
|
+
# Internal: Outputs the build results.
|
79
|
+
#
|
80
|
+
# NOTE: By default it also outputs the manifest entries.
|
81
|
+
def log_build_result(stdout, stderr, status)
|
73
82
|
if status.success?
|
74
83
|
logger.info "Build with Vite complete: #{ config.build_output_dir }"
|
75
84
|
logger.error(stderr.to_s) unless stderr.empty?
|
@@ -78,8 +87,6 @@ private
|
|
78
87
|
non_empty_streams = [stdout, stderr].delete_if(&:empty?)
|
79
88
|
logger.error "Build with Vite failed:\n#{ non_empty_streams.join("\n\n") }"
|
80
89
|
end
|
81
|
-
|
82
|
-
status.success?
|
83
90
|
end
|
84
91
|
|
85
92
|
# Internal: Used to prefix the bin/vite executable file.
|
@@ -101,13 +108,4 @@ private
|
|
101
108
|
config.config_path,
|
102
109
|
].freeze
|
103
110
|
end
|
104
|
-
|
105
|
-
# Internal: Sets additional environment variables for vite-plugin-ruby.
|
106
|
-
def vite_env
|
107
|
-
ViteRails.env.merge(
|
108
|
-
"#{ ViteRails::ENV_PREFIX }_CONFIG_PATH" => config.config_path,
|
109
|
-
"#{ ViteRails::ENV_PREFIX }_MODE" => config.mode,
|
110
|
-
"#{ ViteRails::ENV_PREFIX }_ROOT" => config.root,
|
111
|
-
).transform_values(&:to_s)
|
112
|
-
end
|
113
111
|
end
|
data/lib/vite_rails/commands.rb
CHANGED
@@ -11,6 +11,15 @@ class ViteRails::Commands
|
|
11
11
|
manifest.refresh
|
12
12
|
end
|
13
13
|
|
14
|
+
# Public: Defaults to production, and exits if the build fails.
|
15
|
+
def build_from_rake
|
16
|
+
with_node_env(ENV.fetch('NODE_ENV', 'production')) {
|
17
|
+
ensure_log_goes_to_stdout {
|
18
|
+
build || exit!
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
14
23
|
# Public: Builds all assets that are managed by Vite, from the entrypoints.
|
15
24
|
def build
|
16
25
|
builder.build.tap { manifest.refresh }
|
@@ -20,6 +29,14 @@ class ViteRails::Commands
|
|
20
29
|
def clobber
|
21
30
|
config.build_output_dir.rmtree if config.build_output_dir.exist?
|
22
31
|
config.build_cache_dir.rmtree if config.build_cache_dir.exist?
|
32
|
+
config.vite_cache_dir.rmtree if config.vite_cache_dir.exist?
|
33
|
+
end
|
34
|
+
|
35
|
+
# Public: Receives arguments from a rake task.
|
36
|
+
def clean_from_rake(args)
|
37
|
+
ensure_log_goes_to_stdout {
|
38
|
+
clean(keep_up_to: Integer(args.keep || 2), age_in_seconds: Integer(args.age || 3600))
|
39
|
+
}
|
23
40
|
end
|
24
41
|
|
25
42
|
# Public: Cleanup old assets in the output directory.
|
@@ -33,21 +50,16 @@ class ViteRails::Commands
|
|
33
50
|
# To force only 1 backup to be kept: clean(1, 0)
|
34
51
|
# To only keep files created within the last 10 minutes: clean(0, 600)
|
35
52
|
def clean(keep_up_to: 2, age_in_seconds: 3600)
|
36
|
-
return false unless
|
53
|
+
return false unless may_clean?
|
37
54
|
|
38
|
-
versions
|
55
|
+
versions
|
39
56
|
.each_with_index
|
40
57
|
.drop_while { |(mtime, _), index|
|
41
58
|
max_age = [0, Time.now - Time.at(mtime)].max
|
42
59
|
max_age < age_in_seconds || index < keep_up_to
|
43
60
|
}
|
44
|
-
.each do |(_, files),
|
45
|
-
files
|
46
|
-
next unless File.file?(file)
|
47
|
-
|
48
|
-
File.delete(file)
|
49
|
-
logger.info("Removed #{ file }")
|
50
|
-
end
|
61
|
+
.each do |(_, files), _|
|
62
|
+
clean_files(files)
|
51
63
|
end
|
52
64
|
true
|
53
65
|
end
|
@@ -56,13 +68,42 @@ private
|
|
56
68
|
|
57
69
|
delegate :config, :builder, :manifest, :logger, to: :@vite_rails
|
58
70
|
|
71
|
+
def may_clean?
|
72
|
+
config.build_output_dir.exist? && config.manifest_path.exist?
|
73
|
+
end
|
74
|
+
|
75
|
+
def clean_files(files)
|
76
|
+
files.select { |file| File.file?(file) }.each do |file|
|
77
|
+
File.delete(file)
|
78
|
+
logger.info("Removed #{ file }")
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
59
82
|
def versions
|
60
83
|
all_files = Dir.glob("#{ config.build_output_dir }/**/*")
|
61
84
|
entries = all_files - [config.manifest_path] - current_version_files
|
62
|
-
entries.reject { |file| File.directory?(file) }
|
85
|
+
entries.reject { |file| File.directory?(file) }
|
86
|
+
.group_by { |file| File.mtime(file).utc.to_i }
|
87
|
+
.sort.reverse
|
63
88
|
end
|
64
89
|
|
65
90
|
def current_version_files
|
66
91
|
Dir.glob(manifest.refresh.values.map { |value| config.build_output_dir.join("#{ value['file'] }*") })
|
67
92
|
end
|
93
|
+
|
94
|
+
def with_node_env(env)
|
95
|
+
original = ENV['NODE_ENV']
|
96
|
+
ENV['NODE_ENV'] = env
|
97
|
+
yield
|
98
|
+
ensure
|
99
|
+
ENV['NODE_ENV'] = original
|
100
|
+
end
|
101
|
+
|
102
|
+
def ensure_log_goes_to_stdout
|
103
|
+
old_logger = ViteRails.logger
|
104
|
+
ViteRails.logger = ActiveSupport::Logger.new(STDOUT)
|
105
|
+
yield
|
106
|
+
ensure
|
107
|
+
ViteRails.logger = old_logger
|
108
|
+
end
|
68
109
|
end
|