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
data/lib/vite_rails/config.rb
CHANGED
@@ -1,16 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'json'
|
4
|
+
|
3
5
|
# Public: Allows to resolve configuration sourced from `config/vite.json` and
|
4
6
|
# environment variables, combining them with the default options.
|
5
7
|
class ViteRails::Config
|
6
8
|
delegate :as_json, :inspect, to: :@config
|
7
9
|
|
8
|
-
def initialize(
|
9
|
-
@config =
|
10
|
-
|
11
|
-
config.each_key do |option|
|
12
|
-
define_singleton_method(option) { @config[option] }
|
13
|
-
end
|
10
|
+
def initialize(attrs)
|
11
|
+
@config = attrs.tap { |config| coerce_values(config) }.freeze
|
14
12
|
end
|
15
13
|
|
16
14
|
def protocol
|
@@ -26,9 +24,33 @@ class ViteRails::Config
|
|
26
24
|
build_output_dir.join('manifest.json')
|
27
25
|
end
|
28
26
|
|
27
|
+
# Internal: Path where vite-plugin-ruby outputs the assets manifest file.
|
28
|
+
def assets_manifest_path
|
29
|
+
build_output_dir.join('manifest-assets.json')
|
30
|
+
end
|
31
|
+
|
29
32
|
# Public: The directory where Vite will store the built assets.
|
30
33
|
def build_output_dir
|
31
|
-
|
34
|
+
root.join(public_dir, public_output_dir)
|
35
|
+
end
|
36
|
+
|
37
|
+
# Public: The directory where the entries are located.
|
38
|
+
def resolved_entrypoints_dir
|
39
|
+
root.join(source_code_dir, entrypoints_dir)
|
40
|
+
end
|
41
|
+
|
42
|
+
# Internal: The directory where Vite stores its processing cache.
|
43
|
+
def vite_cache_dir
|
44
|
+
root.join('node_modules/.vite')
|
45
|
+
end
|
46
|
+
|
47
|
+
# Public: Sets additional environment variables for vite-plugin-ruby.
|
48
|
+
def to_env
|
49
|
+
CONFIGURABLE_WITH_ENV.each_with_object({}) do |option, env|
|
50
|
+
unless (value = @config[option]).nil?
|
51
|
+
env["#{ ViteRails::ENV_PREFIX }_#{ option.upcase }"] = value.to_s
|
52
|
+
end
|
53
|
+
end.merge(ViteRails.env)
|
32
54
|
end
|
33
55
|
|
34
56
|
private
|
@@ -36,10 +58,11 @@ private
|
|
36
58
|
# Internal: Coerces all the configuration values, in case they were passed
|
37
59
|
# as environment variables which are always strings.
|
38
60
|
def coerce_values(config)
|
39
|
-
|
40
|
-
coerce_paths(config, 'assets_dir', 'build_cache_dir', 'config_path', 'public_dir', 'source_code_dir', 'public_output_dir', 'root')
|
61
|
+
config['mode'] = config['mode'].to_s
|
41
62
|
config['port'] = config['port'].to_i
|
42
|
-
config['root']
|
63
|
+
config['root'] = Pathname.new(config['root'])
|
64
|
+
config['build_cache_dir'] = config['root'].join(config['build_cache_dir'])
|
65
|
+
coerce_booleans(config, 'auto_build', 'hide_build_console_output', 'https')
|
43
66
|
end
|
44
67
|
|
45
68
|
# Internal: Coerces configuration options to boolean.
|
@@ -47,58 +70,70 @@ private
|
|
47
70
|
names.each { |name| config[name] = [true, 'true'].include?(config[name]) }
|
48
71
|
end
|
49
72
|
|
50
|
-
# Internal: Converts configuration options to pathname.
|
51
|
-
def coerce_paths(config, *names)
|
52
|
-
names.each { |name| config[name] = Pathname.new(config[name]) unless config[name].nil? }
|
53
|
-
end
|
54
|
-
|
55
73
|
class << self
|
56
74
|
# Public: Returns the project configuration for Vite.
|
57
|
-
def resolve_config
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
new DEFAULT_CONFIG.merge(config_from_env)
|
75
|
+
def resolve_config(**attrs)
|
76
|
+
config = attrs.transform_keys(&:to_s).reverse_merge(config_defaults)
|
77
|
+
file_path = File.join(config['root'], config['config_path'])
|
78
|
+
file_config = config_from_file(file_path, mode: config['mode'])
|
79
|
+
new DEFAULT_CONFIG.merge(file_config).merge(config_from_env).merge(config)
|
62
80
|
end
|
63
81
|
|
64
82
|
private
|
65
83
|
|
84
|
+
# Internal: Default values for a Rails application.
|
85
|
+
def config_defaults
|
86
|
+
{
|
87
|
+
'asset_host' => option_from_env('asset_host') || Rails.application&.config&.action_controller&.asset_host,
|
88
|
+
'config_path' => option_from_env('config_path') || DEFAULT_CONFIG.fetch('config_path'),
|
89
|
+
'mode' => option_from_env('mode') || Rails.env.to_s,
|
90
|
+
'root' => option_from_env('root') || Rails.root || Dir.pwd,
|
91
|
+
}
|
92
|
+
end
|
93
|
+
|
66
94
|
# Internal: Used to load a JSON file from the specified path.
|
67
95
|
def load_json(path)
|
68
96
|
JSON.parse(File.read(File.expand_path(path))).deep_transform_keys(&:underscore)
|
69
97
|
end
|
70
98
|
|
71
99
|
# Internal: Retrieves a configuration option from environment variables.
|
72
|
-
def
|
73
|
-
|
100
|
+
def option_from_env(name)
|
101
|
+
ViteRails.env["#{ ViteRails::ENV_PREFIX }_#{ name.upcase }"]
|
74
102
|
end
|
75
103
|
|
76
104
|
# Internal: Extracts the configuration options provided as env vars.
|
77
105
|
def config_from_env
|
78
|
-
CONFIGURABLE_WITH_ENV.each_with_object({}) do |
|
79
|
-
if value =
|
80
|
-
env_vars[
|
106
|
+
CONFIGURABLE_WITH_ENV.each_with_object({}) do |option, env_vars|
|
107
|
+
if value = option_from_env(option)
|
108
|
+
env_vars[option] = value
|
81
109
|
end
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
# Internal: The mode Vite should run on.
|
86
|
-
def vite_mode
|
87
|
-
config_option_from_env('mode') || Rails.env.to_s
|
110
|
+
end
|
88
111
|
end
|
89
112
|
|
90
113
|
# Internal: Loads the configuration options provided in a JSON file.
|
91
|
-
def config_from_file
|
92
|
-
path = config_option_from_env('config_path') || DEFAULT_CONFIG.fetch('config_path')
|
114
|
+
def config_from_file(path, mode:)
|
93
115
|
multi_env_config = load_json(path)
|
94
116
|
multi_env_config.fetch('all', {})
|
95
|
-
.merge(multi_env_config.fetch(
|
117
|
+
.merge(multi_env_config.fetch(mode, {}))
|
118
|
+
rescue Errno::ENOENT => error
|
119
|
+
warn "Check that your vite.json configuration file is available in the load path. #{ error.message }"
|
120
|
+
{}
|
96
121
|
end
|
97
122
|
end
|
98
123
|
|
99
124
|
# Internal: Shared configuration with the Vite plugin for Ruby.
|
100
125
|
DEFAULT_CONFIG = load_json("#{ __dir__ }/../../package/default.vite.json").freeze
|
101
126
|
|
127
|
+
# Internal: Configuration options that can not be provided as env vars.
|
128
|
+
NOT_CONFIGURABLE_WITH_ENV = %w[watch_additional_paths].freeze
|
129
|
+
|
102
130
|
# Internal: Configuration options that can be provided as env vars.
|
103
|
-
CONFIGURABLE_WITH_ENV = (DEFAULT_CONFIG.keys + [
|
131
|
+
CONFIGURABLE_WITH_ENV = (DEFAULT_CONFIG.keys + %w[mode root] - NOT_CONFIGURABLE_WITH_ENV).freeze
|
132
|
+
|
133
|
+
public
|
134
|
+
|
135
|
+
# Define getters for the configuration options.
|
136
|
+
(CONFIGURABLE_WITH_ENV + NOT_CONFIGURABLE_WITH_ENV).each do |option|
|
137
|
+
define_method(option) { @config[option] }
|
138
|
+
end
|
104
139
|
end
|
@@ -14,18 +14,8 @@ class ViteRails::DevServerProxy < Rack::Proxy
|
|
14
14
|
|
15
15
|
# Rack: Intercept asset requests and send them to the Vite server.
|
16
16
|
def perform_request(env)
|
17
|
-
if vite_should_handle?(env
|
18
|
-
env
|
19
|
-
.sub(vite_asset_url_prefix, '/')
|
20
|
-
.sub('.ts.js', '.ts') # Patch: Rails helpers always append the extension.
|
21
|
-
env['PATH_INFO'], env['QUERY_STRING'] = env['REQUEST_URI'].split('?')
|
22
|
-
|
23
|
-
env['HTTP_HOST'] = env['HTTP_X_FORWARDED_HOST'] = config.host
|
24
|
-
env['HTTP_X_FORWARDED_SERVER'] = config.host_with_port
|
25
|
-
env['HTTP_PORT'] = env['HTTP_X_FORWARDED_PORT'] = config.port.to_s
|
26
|
-
env['HTTP_X_FORWARDED_PROTO'] = env['HTTP_X_FORWARDED_SCHEME'] = config.protocol
|
27
|
-
env['HTTPS'] = env['HTTP_X_FORWARDED_SSL'] = 'off' unless config.https
|
28
|
-
env['SCRIPT_NAME'] = ''
|
17
|
+
if vite_should_handle?(env) && dev_server_running?
|
18
|
+
forward_to_vite_dev_server(env)
|
29
19
|
super(env)
|
30
20
|
else
|
31
21
|
@app.call(env)
|
@@ -34,13 +24,31 @@ class ViteRails::DevServerProxy < Rack::Proxy
|
|
34
24
|
|
35
25
|
private
|
36
26
|
|
37
|
-
delegate :config, :
|
27
|
+
delegate :config, :dev_server_running?, to: :@vite_rails
|
38
28
|
|
39
|
-
def
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
29
|
+
def rewrite_uri_for_vite(env)
|
30
|
+
uri = env.fetch('REQUEST_URI') { [env['PATH_INFO'], env['QUERY_STRING']].reject(&:blank?).join('?') }
|
31
|
+
.sub(vite_asset_url_prefix, '/')
|
32
|
+
env['PATH_INFO'], env['QUERY_STRING'] = (env['REQUEST_URI'] = uri).split('?')
|
33
|
+
end
|
34
|
+
|
35
|
+
def forward_to_vite_dev_server(env)
|
36
|
+
rewrite_uri_for_vite(env)
|
37
|
+
env['HTTP_HOST'] = env['HTTP_X_FORWARDED_HOST'] = config.host
|
38
|
+
env['HTTP_X_FORWARDED_SERVER'] = config.host_with_port
|
39
|
+
env['HTTP_PORT'] = env['HTTP_X_FORWARDED_PORT'] = config.port.to_s
|
40
|
+
env['HTTP_X_FORWARDED_PROTO'] = env['HTTP_X_FORWARDED_SCHEME'] = config.protocol
|
41
|
+
env['HTTPS'] = env['HTTP_X_FORWARDED_SSL'] = 'off' unless config.https
|
42
|
+
env['SCRIPT_NAME'] = ''
|
43
|
+
end
|
44
|
+
|
45
|
+
def vite_should_handle?(env)
|
46
|
+
path, query, referer = env['PATH_INFO'], env['QUERY_STRING'], env['HTTP_REFERER']
|
47
|
+
return true if path.start_with?(vite_asset_url_prefix) # Vite asset
|
48
|
+
return true if path.start_with?(VITE_DEPENDENCY_PREFIX) # Packages and imports
|
49
|
+
return true if query&.start_with?('t=') # Hot Reload for a stylesheet
|
50
|
+
return true if query&.start_with?('import&') # Hot Reload for an imported entrypoint
|
51
|
+
return true if referer && URI.parse(referer).path.start_with?(vite_asset_url_prefix) # Entry imported from another entry.
|
44
52
|
end
|
45
53
|
|
46
54
|
def vite_asset_url_prefix
|
data/lib/vite_rails/helper.rb
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
# Public: Allows to render HTML tags for scripts and styles processed by Vite.
|
4
4
|
module ViteRails::Helper
|
5
|
-
DEFAULT_VITE_SKIP_PRELOAD_TAGS = Rails
|
5
|
+
DEFAULT_VITE_SKIP_PRELOAD_TAGS = Rails.gem_version < Gem::Version.new('5.2.0')
|
6
6
|
|
7
7
|
# Public: Returns the current Vite Rails instance.
|
8
8
|
def current_vite_instance
|
@@ -11,15 +11,17 @@ module ViteRails::Helper
|
|
11
11
|
|
12
12
|
# Public: Renders a script tag for vite/client to enable HMR in development.
|
13
13
|
def vite_client_tag
|
14
|
-
|
14
|
+
return unless current_vite_instance.dev_server_running?
|
15
|
+
|
16
|
+
content_tag('script', '', src: current_vite_instance.manifest.prefix_vite_asset('@vite/client'), type: 'module')
|
15
17
|
end
|
16
18
|
|
17
|
-
# Public:
|
19
|
+
# Public: Resolves the path for the specified Vite asset.
|
18
20
|
#
|
19
21
|
# Example:
|
20
22
|
# <%= vite_asset_path 'calendar.css' %> # => "/vite/assets/calendar-1016838bab065ae1e122.css"
|
21
23
|
def vite_asset_path(name, **options)
|
22
|
-
current_vite_instance.manifest.lookup!(name, **options).fetch('file')
|
24
|
+
path_to_asset current_vite_instance.manifest.lookup!(name, **options).fetch('file')
|
23
25
|
end
|
24
26
|
|
25
27
|
# Public: Renders a <script> tag for the specified Vite entrypoints.
|
@@ -31,15 +33,17 @@ module ViteRails::Helper
|
|
31
33
|
crossorigin: 'anonymous',
|
32
34
|
**options)
|
33
35
|
js_entries = names.map { |name| current_vite_instance.manifest.lookup!(name, type: asset_type) }
|
34
|
-
js_tags = javascript_include_tag(*js_entries.map { |entry| entry['file'] },
|
36
|
+
js_tags = javascript_include_tag(*js_entries.map { |entry| entry['file'] }, crossorigin: crossorigin, type: type, **options)
|
37
|
+
|
38
|
+
preload_entries = js_entries.flat_map { |entry| entry['imports'] }.compact.uniq
|
35
39
|
|
36
|
-
unless skip_preload_tags ||
|
37
|
-
preload_paths =
|
40
|
+
unless skip_preload_tags || current_vite_instance.dev_server_running?
|
41
|
+
preload_paths = preload_entries.map { |entry| entry['file'] }.compact.uniq
|
38
42
|
preload_tags = preload_paths.map { |path| preload_link_tag(path, crossorigin: crossorigin) }
|
39
43
|
end
|
40
44
|
|
41
|
-
unless skip_style_tags ||
|
42
|
-
style_paths =
|
45
|
+
unless skip_style_tags || current_vite_instance.dev_server_running?
|
46
|
+
style_paths = (js_entries + preload_entries).flat_map { |entry| entry['css'] }.compact.uniq
|
43
47
|
style_tags = stylesheet_link_tag(*style_paths)
|
44
48
|
end
|
45
49
|
|
@@ -51,7 +55,7 @@ module ViteRails::Helper
|
|
51
55
|
# NOTE: Because TypeScript is not a valid target in browsers, we only specify
|
52
56
|
# the ts file when running the Vite development server.
|
53
57
|
def vite_typescript_tag(*names, **options)
|
54
|
-
vite_javascript_tag(*names, asset_type: :typescript, **options)
|
58
|
+
vite_javascript_tag(*names, asset_type: :typescript, extname: false, **options)
|
55
59
|
end
|
56
60
|
|
57
61
|
# Public: Renders a <link> tag for the specified Vite entrypoints.
|
data/lib/vite_rails/manifest.rb
CHANGED
@@ -31,17 +31,22 @@ class ViteRails::Manifest
|
|
31
31
|
# Example:
|
32
32
|
# ViteRails.manifest.lookup('calendar.js')
|
33
33
|
# # { "file" => "/vite/assets/calendar-1016838bab065ae1e122.js", "imports" => [] }
|
34
|
-
def lookup(name, type:)
|
34
|
+
def lookup(name, type: nil)
|
35
35
|
build if should_build?
|
36
36
|
|
37
37
|
find_manifest_entry(with_file_extension(name, type))
|
38
38
|
end
|
39
39
|
|
40
|
-
# Public: Refreshes the cached mappings by reading the updated manifest.
|
40
|
+
# Public: Refreshes the cached mappings by reading the updated manifest files.
|
41
41
|
def refresh
|
42
42
|
@manifest = load_manifest
|
43
43
|
end
|
44
44
|
|
45
|
+
# Public: Scopes an asset to the output folder in public, as a path.
|
46
|
+
def prefix_vite_asset(path)
|
47
|
+
File.join("/#{ config.public_output_dir }", path)
|
48
|
+
end
|
49
|
+
|
45
50
|
private
|
46
51
|
|
47
52
|
delegate :config, :builder, :dev_server_running?, to: :@vite_rails
|
@@ -55,7 +60,7 @@ private
|
|
55
60
|
# Internal: Finds the specified entry in the manifest.
|
56
61
|
def find_manifest_entry(name)
|
57
62
|
if dev_server_running?
|
58
|
-
{ 'file' =>
|
63
|
+
{ 'file' => prefix_vite_asset(name.to_s) }
|
59
64
|
else
|
60
65
|
manifest[name.to_s]
|
61
66
|
end
|
@@ -76,15 +81,18 @@ private
|
|
76
81
|
@manifest ||= load_manifest
|
77
82
|
end
|
78
83
|
|
79
|
-
# Internal:
|
84
|
+
# Internal: Loads and merges the manifest files, resolving the asset paths.
|
80
85
|
def load_manifest
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
86
|
+
files = [config.manifest_path, config.assets_manifest_path].select(&:exist?)
|
87
|
+
files.map { |path| JSON.parse(path.read) }.inject({}, &:merge).tap(&method(:resolve_references))
|
88
|
+
end
|
89
|
+
|
90
|
+
# Internal: Resolves the paths that reference a manifest entry.
|
91
|
+
def resolve_references(manifest)
|
92
|
+
manifest.each_value do |entry|
|
93
|
+
entry['file'] = prefix_vite_asset(entry['file'])
|
94
|
+
entry['css'] = Array.wrap(entry['css']).map { |path| prefix_vite_asset(path) } if entry['css']
|
95
|
+
entry['imports']&.map! { |name| manifest.fetch(name) }
|
88
96
|
end
|
89
97
|
end
|
90
98
|
|
@@ -92,12 +100,8 @@ private
|
|
92
100
|
def with_file_extension(name, entry_type)
|
93
101
|
return name unless File.extname(name.to_s).empty?
|
94
102
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
# Internal: Scopes the paths in the manifest to the output folder in public.
|
99
|
-
def within_public_output_dir(path)
|
100
|
-
"/#{ config.public_output_dir.join(path) }"
|
103
|
+
extension = extension_for_type(entry_type)
|
104
|
+
extension ? "#{ name }.#{ extension }" : name
|
101
105
|
end
|
102
106
|
|
103
107
|
# Internal: Allows to receive :javascript and :stylesheet as :type in helpers.
|
@@ -105,8 +109,8 @@ private
|
|
105
109
|
case entry_type
|
106
110
|
when :javascript then 'js'
|
107
111
|
when :stylesheet then 'css'
|
108
|
-
when :typescript then
|
109
|
-
else entry_type
|
112
|
+
when :typescript then 'ts'
|
113
|
+
else entry_type
|
110
114
|
end
|
111
115
|
end
|
112
116
|
|
@@ -114,12 +118,12 @@ private
|
|
114
118
|
def missing_entry_error(name, type: nil, **_options)
|
115
119
|
file_name = with_file_extension(name, type)
|
116
120
|
raise ViteRails::Manifest::MissingEntryError, <<~MSG
|
117
|
-
Vite Rails can't find #{ file_name } in #{ config.manifest_path }.
|
121
|
+
Vite Rails can't find #{ file_name } in #{ config.manifest_path } or #{ config.assets_manifest_path }.
|
118
122
|
|
119
123
|
Possible causes:
|
120
124
|
#{ missing_entry_causes.map { |cause| "\t- #{ cause }" }.join("\n") }
|
121
125
|
|
122
|
-
|
126
|
+
Content in your manifests:
|
123
127
|
#{ JSON.pretty_generate(@manifest) }
|
124
128
|
MSG
|
125
129
|
end
|
@@ -129,9 +133,10 @@ private
|
|
129
133
|
[
|
130
134
|
(dev_server_running? && 'Vite has not yet re-built your latest changes.'),
|
131
135
|
(local && !dev_server_running? && "\"autoBuild\": false in your #{ config.mode } configuration."),
|
136
|
+
(local && !dev_server_running? && 'The Vite development server has crashed or is no longer available.'),
|
132
137
|
'You have misconfigured config/vite.json file.',
|
133
138
|
(!local && 'Assets have not been precompiled'),
|
134
|
-
].select(&:
|
139
|
+
].select(&:present?)
|
135
140
|
rescue StandardError
|
136
141
|
[]
|
137
142
|
end
|
data/lib/vite_rails/runner.rb
CHANGED
@@ -31,10 +31,9 @@ private
|
|
31
31
|
cmd = vite_executable
|
32
32
|
cmd.prepend('node', '--inspect-brk') if args.include?('--debug')
|
33
33
|
cmd.prepend('node', '--trace-deprecation') if args.delete('--trace-deprecation')
|
34
|
-
args.append('--mode',
|
34
|
+
args.append('--mode', ViteRails.mode) unless args.include?('--mode') || args.include?('-m')
|
35
35
|
cmd += args
|
36
|
-
|
37
|
-
Dir.chdir(File.expand_path('.', Dir.pwd)) { Kernel.exec(ViteRails.env, *cmd) }
|
36
|
+
Dir.chdir(File.expand_path('.', Dir.pwd)) { Kernel.exec(ViteRails.config.to_env, *cmd) }
|
38
37
|
end
|
39
38
|
|
40
39
|
# Internal: Resolves to an executable for Vite.
|
@@ -49,8 +48,6 @@ private
|
|
49
48
|
|
50
49
|
# Internal: Returns a path where a Vite executable should be found.
|
51
50
|
def vite_bin_path
|
52
|
-
ENV["#{ ViteRails::ENV_PREFIX }_VITE_BIN_PATH"] || `yarn bin vite`.chomp
|
53
|
-
rescue StandardError
|
54
|
-
"#{ `npm bin`.chomp }/vite"
|
51
|
+
ENV["#{ ViteRails::ENV_PREFIX }_VITE_BIN_PATH"] || `yarn bin vite`.chomp.presence || "#{ `npm bin`.chomp }/vite"
|
55
52
|
end
|
56
53
|
end
|
data/lib/vite_rails/version.rb
CHANGED
data/package.json
CHANGED
@@ -1,12 +1,19 @@
|
|
1
1
|
{
|
2
2
|
"name": "only-for-workflows",
|
3
3
|
"version": "unknown",
|
4
|
+
"license": "MIT",
|
4
5
|
"scripts": {
|
6
|
+
"docs": "npm -C docs run docs",
|
7
|
+
"docs:build": "npm -C docs run docs:build",
|
8
|
+
"docs:search": "npm -C docs run docs:search",
|
9
|
+
"docs:lint": "npm -C docs run lint",
|
10
|
+
"build": "rm -rf package/dist && npm -C package run prerelease",
|
11
|
+
"release": "rm -rf package/dist && npm -C package run release",
|
5
12
|
"lint": "npm -C package run lint",
|
6
13
|
"test": "npm -C package run test"
|
7
14
|
},
|
8
15
|
"dependencies": {
|
9
|
-
"vite": "^2.0.0-beta.
|
10
|
-
"vite-plugin-ruby": "^1.0.
|
16
|
+
"vite": "^2.0.0-beta.56",
|
17
|
+
"vite-plugin-ruby": "^1.0.6"
|
11
18
|
}
|
12
19
|
}
|