vite_rails 1.0.8 → 1.0.9

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 +4 -4
  2. data/CHANGELOG.md +5 -1
  3. data/CONTRIBUTING.md +0 -1
  4. data/lib/install/template.rb +1 -1
  5. data/lib/tasks/vite/build.rake +1 -5
  6. data/lib/tasks/vite/clean.rake +1 -3
  7. data/lib/tasks/vite/verify_install.rake +3 -3
  8. data/lib/vite_rails.rb +14 -25
  9. data/lib/vite_rails/builder.rb +11 -4
  10. data/lib/vite_rails/commands.rb +50 -10
  11. data/lib/vite_rails/config.rb +35 -23
  12. data/lib/vite_rails/dev_server_proxy.rb +27 -18
  13. data/lib/vite_rails/helper.rb +4 -2
  14. data/lib/vite_rails/manifest.rb +4 -3
  15. data/lib/vite_rails/runner.rb +2 -5
  16. data/lib/vite_rails/version.rb +1 -1
  17. data/package.json +1 -1
  18. data/test/builder_test.rb +27 -22
  19. data/test/commands_test.rb +67 -0
  20. data/test/configuration_test.rb +88 -46
  21. data/test/dev_server_proxy_test.rb +101 -0
  22. data/test/dev_server_test.rb +0 -30
  23. data/test/engine_rake_tasks_test.rb +55 -17
  24. data/test/helper_test.rb +37 -105
  25. data/test/manifest_test.rb +33 -29
  26. data/test/mode_test.rb +6 -11
  27. data/test/mounted_app/test/dummy/config/vite.json +5 -11
  28. data/test/mounted_app/test/dummy/package.json +2 -1
  29. data/test/mounted_app/test/dummy/yarn.lock +208 -0
  30. data/test/rake_tasks_test.rb +5 -19
  31. data/test/runner_test.rb +31 -0
  32. data/test/test_app/app/{javascript → frontend}/entrypoints/application.js +0 -0
  33. data/test/test_app/config/vite.json +0 -2
  34. data/test/test_app/config/vite_additional_paths.json +5 -0
  35. data/test/test_app/config/vite_public_dir.json +5 -0
  36. data/test/test_app/public/vite-production/manifest.json +22 -0
  37. data/test/test_helper.rb +48 -14
  38. metadata +21 -23
  39. data/test/command_test.rb +0 -35
  40. data/test/dev_server_runner_test.rb +0 -83
  41. data/test/test_app/app/javascript/entrypoints/multi_entry.css +0 -4
  42. data/test/test_app/app/javascript/entrypoints/multi_entry.js +0 -4
  43. data/test/test_app/config/vite_public_root.yml +0 -20
  44. data/test/test_app/public/vite/manifest.json +0 -36
  45. data/test/vite_runner_test.rb +0 -59
  46. data/test/webpacker_test.rb +0 -15
@@ -6,34 +6,4 @@ class DevServerTest < ViteRails::Test
6
6
  def test_running?
7
7
  refute ViteRails.dev_server.running?
8
8
  end
9
-
10
- def test_host
11
- with_rails_env('development') do
12
- assert_equal ViteRails.config.host, 'localhost'
13
- end
14
- end
15
-
16
- def test_port
17
- with_rails_env('development') do
18
- assert_equal ViteRails.config.port, 3035
19
- end
20
- end
21
-
22
- def test_https?
23
- with_rails_env('development') do
24
- assert_equal ViteRails.config.https, false
25
- end
26
- end
27
-
28
- def test_protocol
29
- with_rails_env('development') do
30
- assert_equal ViteRails.config.protocol, 'http'
31
- end
32
- end
33
-
34
- def test_host_with_port
35
- with_rails_env('development') do
36
- assert_equal ViteRails.config.host_with_port, 'localhost:3035'
37
- end
38
- end
39
9
  end
@@ -4,39 +4,77 @@ require 'test_helper'
4
4
 
5
5
  class EngineRakeTasksTest < Minitest::Test
6
6
  def setup
7
- remove_vite_binstubs
7
+ remove_vite_files
8
8
  end
9
9
 
10
10
  def teardown
11
- remove_vite_binstubs
11
+ remove_vite_files
12
12
  end
13
13
 
14
- def test_task_mounted
15
- output = Dir.chdir(mounted_app_path) { `rake -T` }
14
+ def test_tasks_mounted
15
+ output = within_mounted_app { `bundle exec rake -T` }
16
16
  assert_includes output, 'app:vite'
17
17
  end
18
18
 
19
- def test_binstubs
20
- Dir.chdir(mounted_app_path) { `bundle exec rake app:vite:binstubs` }
21
- vite_binstub_paths.each { |path| assert File.exist?(path) }
19
+ def test_rake_tasks
20
+ within_mounted_app { `bundle exec rake app:vite:binstubs` }
21
+ assert vite_binstub_path.exist?
22
+
23
+ within_mounted_app { `bundle exec rake app:vite:install` }
24
+ assert vite_config_ts_path.exist?
25
+ assert app_frontend_dir.exist?
26
+
27
+ within_mounted_app { `bundle exec rake app:vite:build` }
28
+ assert app_public_dir.exist?
29
+ assert app_public_dir.join('manifest.json').exist?
30
+ assert app_public_dir.join('assets').exist?
31
+
32
+ within_mounted_app { `bundle exec rake app:vite:clean` }
33
+ assert app_public_dir.join('manifest.json').exist? # Still fresh
34
+
35
+ within_mounted_app { `bundle exec rake app:vite:clean[0,0]` }
36
+ refute app_public_dir.join('manifest.json').exist?
37
+
38
+ within_mounted_app { `bundle exec rake app:vite:clobber` }
39
+ refute app_public_dir.exist?
40
+ rescue Minitest::Assertion => error
41
+ raise error unless Rails.gem_version >= Gem::Version.new('6.1.0')
22
42
  end
23
43
 
24
44
  private
25
45
 
46
+ def within_mounted_app
47
+ Dir.chdir(mounted_app_path) { yield }
48
+ end
49
+
26
50
  def mounted_app_path
27
- File.expand_path('mounted_app', __dir__)
51
+ Pathname.new(File.expand_path(__dir__)).join('mounted_app')
52
+ end
53
+
54
+ def root_dir
55
+ mounted_app_path.join('test/dummy')
56
+ end
57
+
58
+ def vite_binstub_path
59
+ root_dir.join('bin/vite')
60
+ end
61
+
62
+ def vite_config_ts_path
63
+ root_dir.join('vite.config.ts')
64
+ end
65
+
66
+ def app_frontend_dir
67
+ root_dir.join('app/frontend')
28
68
  end
29
69
 
30
- def vite_binstub_paths
31
- [
32
- "#{ mounted_app_path }/test/dummy/bin/vite",
33
- "#{ mounted_app_path }/test/dummy/bin/vite-dev-server",
34
- ]
70
+ def app_public_dir
71
+ root_dir.join('public/vite-dev')
35
72
  end
36
73
 
37
- def remove_vite_binstubs
38
- vite_binstub_paths.each do |path|
39
- File.delete(path) if File.exist?(path)
40
- end
74
+ def remove_vite_files
75
+ vite_binstub_path.delete if vite_binstub_path.exist?
76
+ vite_config_ts_path.delete if vite_config_ts_path.exist?
77
+ app_frontend_dir.rmtree if app_frontend_dir.exist?
78
+ app_public_dir.rmtree if app_public_dir.exist?
41
79
  end
42
80
  end
@@ -3,6 +3,8 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class HelperTest < ActionView::TestCase
6
+ include ViteRailsTestHelpers
7
+
6
8
  tests ViteRails::Helper
7
9
 
8
10
  attr_reader :request
@@ -17,122 +19,52 @@ class HelperTest < ActionView::TestCase
17
19
  end.new
18
20
  end
19
21
 
20
- def test_asset_pack_path
21
- assert_equal '/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_path('bootstrap.js')
22
- assert_equal '/packs/bootstrap-c38deda30895059837cf.css', asset_pack_path('bootstrap.css')
23
- end
24
-
25
- def test_asset_pack_url
26
- assert_equal 'https://example.com/packs/bootstrap-300631c4f0e0f9c865bc.js', asset_pack_url('bootstrap.js')
27
- assert_equal 'https://example.com/packs/bootstrap-c38deda30895059837cf.css', asset_pack_url('bootstrap.css')
22
+ def test_vite_client_tag
23
+ assert_nil vite_client_tag
24
+ with_dev_server_running {
25
+ assert_equal '<script src="/@vite/client" type="module"></script>', vite_client_tag
26
+ }
28
27
  end
29
28
 
30
- def test_image_pack_path
31
- assert_equal '/packs/application-k344a6d59eef8632c9d1.png', image_pack_path('application.png')
32
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('image.jpg')
33
- assert_equal '/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_path('media/images/image.jpg')
34
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('nested/image.jpg')
35
- assert_equal '/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_path('media/images/nested/image.jpg')
29
+ def test_vite_asset_path
30
+ assert_equal '/vite-production/assets/colored.1173bfe0.js', vite_asset_path('colored.js')
31
+ assert_equal '/vite-production/assets/colored.84277fd6.css', vite_asset_path('colored.css')
32
+ with_dev_server_running {
33
+ assert_equal '/vite-production/colored.js', vite_asset_path('colored.js')
34
+ assert_equal '/vite-production/colored.css', vite_asset_path('colored.css')
35
+ }
36
36
  end
37
37
 
38
- def test_image_pack_url
39
- assert_equal 'https://example.com/packs/application-k344a6d59eef8632c9d1.png', image_pack_url('application.png')
40
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('image.jpg')
41
- assert_equal 'https://example.com/packs/media/images/image-c38deda30895059837cf.jpg', image_pack_url('media/images/image.jpg')
42
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('nested/image.jpg')
43
- assert_equal 'https://example.com/packs/media/images/nested/image-c38deda30895059837cf.jpg', image_pack_url('media/images/nested/image.jpg')
44
- end
38
+ def test_vite_stylesheet_tag
39
+ assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/assets/colored.84277fd6.css" />),
40
+ vite_stylesheet_tag('colored')
45
41
 
46
- def test_image_pack_tag
47
- assert_equal \
48
- '<img alt="Edit Entry" src="/packs/application-k344a6d59eef8632c9d1.png" width="16" height="10" />',
49
- image_pack_tag('application.png', size: '16x10', alt: 'Edit Entry')
50
- assert_equal \
51
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
52
- image_pack_tag('image.jpg', size: '16x10', alt: 'Edit Entry')
53
- assert_equal \
54
- '<img alt="Edit Entry" src="/packs/media/images/image-c38deda30895059837cf.jpg" width="16" height="10" />',
55
- image_pack_tag('media/images/image.jpg', size: '16x10', alt: 'Edit Entry')
56
- assert_equal \
57
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
58
- image_pack_tag('nested/image.jpg', size: '16x10', alt: 'Edit Entry')
59
- assert_equal \
60
- '<img alt="Edit Entry" src="/packs/media/images/nested/image-c38deda30895059837cf.jpg" width="16" height="10" />',
61
- image_pack_tag('media/images/nested/image.jpg', size: '16x10', alt: 'Edit Entry')
62
- assert_equal \
63
- '<img srcset="/packs/media/images/image-2x-7cca48e6cae66ec07b8e.jpg 2x" src="/packs/media/images/image-c38deda30895059837cf.jpg" />',
64
- image_pack_tag('media/images/image.jpg', srcset: { 'media/images/image-2x.jpg' => '2x' })
65
- end
42
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
66
43
 
67
- def test_favicon_pack_tag
68
- assert_equal \
69
- '<link rel="apple-touch-icon" type="image/png" href="/packs/application-k344a6d59eef8632c9d1.png" />',
70
- favicon_pack_tag('application.png', rel: 'apple-touch-icon', type: 'image/png')
71
- assert_equal \
72
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
73
- favicon_pack_tag('mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
74
- assert_equal \
75
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/mb-icon-c38deda30895059837cf.png" />',
76
- favicon_pack_tag('media/images/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
77
- assert_equal \
78
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
79
- favicon_pack_tag('nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
80
- assert_equal \
81
- '<link rel="apple-touch-icon" type="image/png" href="/packs/media/images/nested/mb-icon-c38deda30895059837cf.png" />',
82
- favicon_pack_tag('media/images/nested/mb-icon.png', rel: 'apple-touch-icon', type: 'image/png')
83
- end
44
+ with_dev_server_running {
45
+ assert_equal %(<link rel="stylesheet" media="screen" href="/vite-production/colored.css" />),
46
+ vite_stylesheet_tag('colored')
84
47
 
85
- def test_javascript_pack_tag
86
- assert_equal \
87
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
88
- javascript_pack_tag('bootstrap.js')
48
+ assert_equal vite_stylesheet_tag('colored'), vite_stylesheet_tag('colored.css')
49
+ }
89
50
  end
90
51
 
91
- def test_javascript_pack_tag_symbol
92
- assert_equal \
93
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js"></script>),
94
- javascript_pack_tag(:bootstrap)
95
- end
52
+ def test_vite_javascript_tag
53
+ assert_equal [
54
+ %(<script src="/vite-production/assets/application.a0ba047e.js" crossorigin="anonymous" type="module"></script>),
55
+ %(<link rel="preload" href="/vite-production/assets/example_import.8e1fddc0.js" as="script" type="text/javascript" crossorigin="anonymous">),
56
+ %(<link rel="stylesheet" media="screen" href="/vite-production/assets/application.cccfef34.css" />),
57
+ ].join, vite_javascript_tag('application')
96
58
 
97
- def test_javascript_pack_tag_splat
98
- assert_equal \
99
- %(<script src="/packs/bootstrap-300631c4f0e0f9c865bc.js" defer="defer"></script>\n) +
100
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js" defer="defer"></script>),
101
- javascript_pack_tag('bootstrap.js', 'application.js', defer: true)
102
- end
59
+ assert_equal vite_javascript_tag('application'), vite_javascript_tag('application.js')
60
+ assert_equal vite_javascript_tag('application'), vite_typescript_tag('application')
103
61
 
104
- def test_javascript_pack_tag_split_chunks
105
- assert_equal \
106
- %(<script src="/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js"></script>\n) +
107
- %(<script src="/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js"></script>\n) +
108
- %(<script src="/packs/application-k344a6d59eef8632c9d1.js"></script>),
109
- javascript_packs_with_chunks_tag('application')
110
- end
111
-
112
- def test_stylesheet_pack_tag_split_chunks
113
- assert_equal \
114
- %(<link rel="stylesheet" media="screen" href="/packs/1-c20632e7baf2c81200d3.chunk.css" />\n) +
115
- %(<link rel="stylesheet" media="screen" href="/packs/application-k344a6d59eef8632c9d1.chunk.css" />\n) +
116
- %(<link rel="stylesheet" media="screen" href="/packs/hello_stimulus-k344a6d59eef8632c9d1.chunk.css" />),
117
- stylesheet_packs_with_chunks_tag('application', 'hello_stimulus')
118
- end
119
-
120
- def test_stylesheet_pack_tag
121
- assert_equal \
122
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
123
- stylesheet_pack_tag('bootstrap.css')
124
- end
125
-
126
- def test_stylesheet_pack_tag_symbol
127
- assert_equal \
128
- %(<link rel="stylesheet" media="screen" href="/packs/bootstrap-c38deda30895059837cf.css" />),
129
- stylesheet_pack_tag(:bootstrap)
130
- end
62
+ with_dev_server_running {
63
+ assert_equal %(<script src="/vite-production/application.js" crossorigin="anonymous" type="module"></script>),
64
+ vite_javascript_tag('application')
131
65
 
132
- def test_stylesheet_pack_tag_splat
133
- assert_equal \
134
- %(<link rel="stylesheet" media="all" href="/packs/bootstrap-c38deda30895059837cf.css" />\n) +
135
- %(<link rel="stylesheet" media="all" href="/packs/application-dd6b1cd38bfa093df600.css" />),
136
- stylesheet_pack_tag('bootstrap.css', 'application.css', media: 'all')
66
+ assert_equal %(<script src="/vite-production/application.ts.js" crossorigin="anonymous" type="module"></script>),
67
+ vite_typescript_tag('application')
68
+ }
137
69
  end
138
70
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  require 'test_helper'
4
4
 
5
- class ManifestTest < Minitest::Test
5
+ class ManifestTest < ViteRails::Test
6
6
  def test_lookup_exception!
7
7
  asset_file = 'calendar.js'
8
8
 
@@ -10,7 +10,7 @@ class ManifestTest < Minitest::Test
10
10
  ViteRails.manifest.lookup!(asset_file)
11
11
  end
12
12
 
13
- assert_match "ViteRails can't find #{ asset_file } in #{ manifest_path }", error.message
13
+ assert_match "Vite Rails can't find #{ asset_file } in #{ manifest_path }", error.message
14
14
  end
15
15
 
16
16
  def test_lookup_with_type_exception!
@@ -20,56 +20,60 @@ class ManifestTest < Minitest::Test
20
20
  ViteRails.manifest.lookup!(asset_file, type: :javascript)
21
21
  end
22
22
 
23
- assert_match "ViteRails can't find #{ asset_file }.js in #{ manifest_path }", error.message
23
+ assert_match "Vite Rails can't find #{ asset_file }.js in #{ manifest_path }", error.message
24
24
  end
25
25
 
26
26
  def test_lookup_success!
27
- assert_equal ViteRails.manifest.lookup!('bootstrap.js'), '/packs/bootstrap-300631c4f0e0f9c865bc.js'
27
+ entry = {
28
+ 'file' => '/vite-production/assets/application.a0ba047e.js',
29
+ 'imports' => [
30
+ '/vite-production/assets/example_import.8e1fddc0.js',
31
+ ],
32
+ }
33
+ assert_equal entry, ViteRails.manifest.lookup!('application.js', type: :javascript)
34
+ assert_equal entry, ViteRails.manifest.lookup!('application', type: :typescript)
28
35
  end
29
36
 
30
- def test_lookup_nil
31
- assert_nil ViteRails.manifest.lookup('foo.js')
37
+ def test_lookup_success_with_dev_server_running!
38
+ entry = { 'file' => '/vite-production/application.js' }
39
+ with_dev_server_running {
40
+ assert_equal entry, ViteRails.manifest.lookup!('application.js')
41
+ }
42
+ entry = { 'file' => '/vite-production/application.ts' }
43
+ with_dev_server_running {
44
+ assert_equal entry, ViteRails.manifest.lookup!('application', type: :typescript)
45
+ }
32
46
  end
33
47
 
34
- def test_lookup_chunks_nil
35
- assert_nil ViteRails.manifest.lookup_pack_with_chunks('foo.js')
48
+ def test_lookup_nil
49
+ assert_nil ViteRails.manifest.lookup('foo.js')
36
50
  end
37
51
 
38
52
  def test_lookup_success
39
- assert_equal ViteRails.manifest.lookup('bootstrap.js'), '/packs/bootstrap-300631c4f0e0f9c865bc.js'
40
- end
41
-
42
- def test_lookup_entrypoint_exception!
43
- asset_file = 'calendar'
44
-
45
- error = assert_raises_manifest_missing_entry_error do
46
- ViteRails.manifest.lookup_pack_with_chunks!(asset_file, type: :javascript)
47
- end
48
-
49
- assert_match "ViteRails can't find #{ asset_file }.js in #{ manifest_path }", error.message
53
+ entry = { 'file' => '/vite-production/assets/application.cccfef34.css', 'imports' => nil }
54
+ assert_equal entry, ViteRails.manifest.lookup('application.css')
55
+ assert_equal entry, ViteRails.manifest.lookup('application.css', type: :stylesheet)
56
+ assert_equal entry, ViteRails.manifest.lookup('application', type: :stylesheet)
50
57
  end
51
58
 
52
- def test_lookup_entrypoint
53
- application_entrypoints = [
54
- '/packs/vendors~application~bootstrap-c20632e7baf2c81200d3.chunk.js',
55
- '/packs/vendors~application-e55f2aae30c07fb6d82a.chunk.js',
56
- '/packs/application-k344a6d59eef8632c9d1.js',
57
- ]
58
-
59
- assert_equal ViteRails.manifest.lookup_pack_with_chunks!('application', type: :javascript), application_entrypoints
59
+ def test_lookup_success_with_dev_server_running
60
+ entry = { 'file' => '/vite-production/application.css' }
61
+ with_dev_server_running {
62
+ assert_equal entry, ViteRails.manifest.lookup('application', type: :stylesheet)
63
+ }
60
64
  end
61
65
 
62
66
  private
63
67
 
64
68
  def assert_raises_manifest_missing_entry_error(&block)
65
69
  error = nil
66
- ViteRails.config.stub :compile?, false do
70
+ ViteRails.config.stub :auto_build, false do
67
71
  error = assert_raises ViteRails::Manifest::MissingEntryError, &block
68
72
  end
69
73
  error
70
74
  end
71
75
 
72
76
  def manifest_path
73
- File.expand_path File.join(File.dirname(__FILE__), 'test_app/public/packs', 'manifest.json').to_s
77
+ File.expand_path File.join(File.dirname(__FILE__), 'test_app/public/vite-production', 'manifest.json').to_s
74
78
  end
75
79
  end
@@ -3,19 +3,14 @@
3
3
  require 'test_helper'
4
4
 
5
5
  class ModeTest < ViteRails::Test
6
- def test_current
7
- assert_equal ViteRails.config.mode, Rails.env
6
+ def test_mode
7
+ assert_equal Rails.env, ViteRails.config.mode
8
+ assert_equal ViteRails.config.mode, ViteRails.mode
8
9
  end
9
10
 
10
- def test_custom_without_config
11
- with_rails_env('foo') do
12
- assert_equal ViteRails.config.mode, 'production'
13
- end
14
- end
15
-
16
- def test_custom_with_config
17
- with_rails_env('staging') do
18
- assert_equal ViteRails.config.mode, 'staging'
11
+ def test_mode_with_rails_env
12
+ with_rails_env('staging') do |config|
13
+ assert_equal 'staging', config.mode
19
14
  end
20
15
  end
21
16
  end
@@ -1,20 +1,14 @@
1
1
  {
2
+ "all": {
3
+ "watchAdditionalPaths": []
4
+ },
2
5
  "development": {
3
6
  "autoBuild": true,
4
- "port": "3535",
5
- "https": true,
6
- "publicOutputDir": "vite-development"
7
+ "publicOutputDir": "vite-dev",
8
+ "port": 3036
7
9
  },
8
10
  "test": {
9
11
  "autoBuild": true,
10
12
  "publicOutputDir": "vite-test"
11
- },
12
- "production": {
13
- "autoBuild": false,
14
- "publicOutputDir": "vite-production"
15
- },
16
- "staging": {
17
- "autoBuild": false,
18
- "publicOutputDir": "vite-staging"
19
13
  }
20
14
  }