vite_rb 0.0.1.alpha1

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.
Files changed (127) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +3 -0
  3. data/.dockerignore +22 -0
  4. data/.github/FUNDING.yml +1 -0
  5. data/.github/workflows/build.yml +17 -0
  6. data/.gitignore +71 -0
  7. data/.ruby-version +1 -0
  8. data/.solargraph.yml +16 -0
  9. data/.standard.yml +11 -0
  10. data/CHANGELOG.md +65 -0
  11. data/Gemfile +8 -0
  12. data/LICENSE.txt +21 -0
  13. data/README.md +258 -0
  14. data/Rakefile +39 -0
  15. data/bin/console +15 -0
  16. data/bin/setup +8 -0
  17. data/examples/rails-without-webpack/.gitignore +34 -0
  18. data/examples/rails-without-webpack/.ruby-version +1 -0
  19. data/examples/rails-without-webpack/Gemfile +33 -0
  20. data/examples/rails-without-webpack/README.md +24 -0
  21. data/examples/rails-without-webpack/Rakefile +6 -0
  22. data/examples/rails-without-webpack/app/assets/config/manifest.js +2 -0
  23. data/examples/rails-without-webpack/app/assets/images/.keep +0 -0
  24. data/examples/rails-without-webpack/app/assets/stylesheets/application.css +15 -0
  25. data/examples/rails-without-webpack/app/assets/stylesheets/static_pages.scss +3 -0
  26. data/examples/rails-without-webpack/app/channels/application_cable/channel.rb +4 -0
  27. data/examples/rails-without-webpack/app/channels/application_cable/connection.rb +4 -0
  28. data/examples/rails-without-webpack/app/channels/chat_channel.rb +12 -0
  29. data/examples/rails-without-webpack/app/controllers/application_controller.rb +2 -0
  30. data/examples/rails-without-webpack/app/controllers/concerns/.keep +0 -0
  31. data/examples/rails-without-webpack/app/controllers/static_pages_controller.rb +4 -0
  32. data/examples/rails-without-webpack/app/helpers/application_helper.rb +2 -0
  33. data/examples/rails-without-webpack/app/helpers/static_pages_helper.rb +2 -0
  34. data/examples/rails-without-webpack/app/jobs/application_job.rb +7 -0
  35. data/examples/rails-without-webpack/app/mailers/application_mailer.rb +4 -0
  36. data/examples/rails-without-webpack/app/models/application_record.rb +3 -0
  37. data/examples/rails-without-webpack/app/models/concerns/.keep +0 -0
  38. data/examples/rails-without-webpack/app/snowpacker/assets/fake-asset.png +0 -0
  39. data/examples/rails-without-webpack/app/snowpacker/channels/consumer.js +5 -0
  40. data/examples/rails-without-webpack/app/snowpacker/channels/index.js +2 -0
  41. data/examples/rails-without-webpack/app/snowpacker/entrypoints/application.js +10 -0
  42. data/examples/rails-without-webpack/app/snowpacker/javascript/index.js +1 -0
  43. data/examples/rails-without-webpack/app/snowpacker/stylesheets/index.css +3 -0
  44. data/examples/rails-without-webpack/app/views/layouts/application.html.erb +15 -0
  45. data/examples/rails-without-webpack/app/views/layouts/mailer.html.erb +13 -0
  46. data/examples/rails-without-webpack/app/views/layouts/mailer.text.erb +1 -0
  47. data/examples/rails-without-webpack/app/views/static_pages/index.html.erb +2 -0
  48. data/examples/rails-without-webpack/bin/bundle +114 -0
  49. data/examples/rails-without-webpack/bin/rails +9 -0
  50. data/examples/rails-without-webpack/bin/rake +9 -0
  51. data/examples/rails-without-webpack/bin/setup +36 -0
  52. data/examples/rails-without-webpack/bin/spring +17 -0
  53. data/examples/rails-without-webpack/bin/yarn +9 -0
  54. data/examples/rails-without-webpack/config.ru +5 -0
  55. data/examples/rails-without-webpack/config/application.rb +19 -0
  56. data/examples/rails-without-webpack/config/boot.rb +4 -0
  57. data/examples/rails-without-webpack/config/cable.yml +10 -0
  58. data/examples/rails-without-webpack/config/credentials.yml.enc +1 -0
  59. data/examples/rails-without-webpack/config/database.yml +25 -0
  60. data/examples/rails-without-webpack/config/environment.rb +5 -0
  61. data/examples/rails-without-webpack/config/environments/development.rb +62 -0
  62. data/examples/rails-without-webpack/config/environments/production.rb +112 -0
  63. data/examples/rails-without-webpack/config/environments/test.rb +49 -0
  64. data/examples/rails-without-webpack/config/initializers/application_controller_renderer.rb +8 -0
  65. data/examples/rails-without-webpack/config/initializers/assets.rb +14 -0
  66. data/examples/rails-without-webpack/config/initializers/backtrace_silencers.rb +7 -0
  67. data/examples/rails-without-webpack/config/initializers/content_security_policy.rb +31 -0
  68. data/examples/rails-without-webpack/config/initializers/cookies_serializer.rb +5 -0
  69. data/examples/rails-without-webpack/config/initializers/filter_parameter_logging.rb +4 -0
  70. data/examples/rails-without-webpack/config/initializers/inflections.rb +16 -0
  71. data/examples/rails-without-webpack/config/initializers/mime_types.rb +4 -0
  72. data/examples/rails-without-webpack/config/initializers/snowpacker.rb +41 -0
  73. data/examples/rails-without-webpack/config/initializers/wrap_parameters.rb +14 -0
  74. data/examples/rails-without-webpack/config/locales/en.yml +33 -0
  75. data/examples/rails-without-webpack/config/puma.rb +38 -0
  76. data/examples/rails-without-webpack/config/routes.rb +5 -0
  77. data/examples/rails-without-webpack/config/snowpacker/.browserslistrc +1 -0
  78. data/examples/rails-without-webpack/config/snowpacker/babel.config.js +76 -0
  79. data/examples/rails-without-webpack/config/snowpacker/postcss.config.js +12 -0
  80. data/examples/rails-without-webpack/config/snowpacker/snowpack.config.js +61 -0
  81. data/examples/rails-without-webpack/config/spring.rb +6 -0
  82. data/examples/rails-without-webpack/config/storage.yml +34 -0
  83. data/examples/rails-without-webpack/db/seeds.rb +7 -0
  84. data/examples/rails-without-webpack/lib/assets/.keep +0 -0
  85. data/examples/rails-without-webpack/lib/tasks/.keep +0 -0
  86. data/examples/rails-without-webpack/package.json +20 -0
  87. data/examples/rails-without-webpack/storage/.keep +0 -0
  88. data/examples/rails-without-webpack/test/application_system_test_case.rb +5 -0
  89. data/examples/rails-without-webpack/test/channels/application_cable/connection_test.rb +11 -0
  90. data/examples/rails-without-webpack/test/channels/chat_channel_test.rb +8 -0
  91. data/examples/rails-without-webpack/test/controllers/.keep +0 -0
  92. data/examples/rails-without-webpack/test/controllers/static_pages_controller_test.rb +8 -0
  93. data/examples/rails-without-webpack/test/fixtures/.keep +0 -0
  94. data/examples/rails-without-webpack/test/fixtures/files/.keep +0 -0
  95. data/examples/rails-without-webpack/test/helpers/.keep +0 -0
  96. data/examples/rails-without-webpack/test/integration/.keep +0 -0
  97. data/examples/rails-without-webpack/test/mailers/.keep +0 -0
  98. data/examples/rails-without-webpack/test/models/.keep +0 -0
  99. data/examples/rails-without-webpack/test/system/.keep +0 -0
  100. data/examples/rails-without-webpack/test/test_helper.rb +13 -0
  101. data/examples/rails-without-webpack/vendor/.keep +0 -0
  102. data/examples/rails-without-webpack/yarn.lock +7545 -0
  103. data/lib/tasks/rails.rake +31 -0
  104. data/lib/tasks/ruby.rake +21 -0
  105. data/lib/vite_rb.rb +25 -0
  106. data/lib/vite_rb/configuration.rb +56 -0
  107. data/lib/vite_rb/engine.rb +5 -0
  108. data/lib/vite_rb/env.rb +29 -0
  109. data/lib/vite_rb/generator.rb +81 -0
  110. data/lib/vite_rb/helpers.rb +51 -0
  111. data/lib/vite_rb/manifest.rb +40 -0
  112. data/lib/vite_rb/proxy.rb +35 -0
  113. data/lib/vite_rb/runner.rb +46 -0
  114. data/lib/vite_rb/templates/postcss.config.js +12 -0
  115. data/lib/vite_rb/templates/vite.config.js +71 -0
  116. data/lib/vite_rb/templates/vite.rb.tt +54 -0
  117. data/lib/vite_rb/templates/vite/channels/consumer.js +5 -0
  118. data/lib/vite_rb/templates/vite/channels/index.js +2 -0
  119. data/lib/vite_rb/templates/vite/entrypoints/application.js +10 -0
  120. data/lib/vite_rb/templates/vite/stylesheets/index.css +3 -0
  121. data/lib/vite_rb/utils.rb +55 -0
  122. data/lib/vite_rb/version.rb +5 -0
  123. data/package.json +25 -0
  124. data/package/src/index.js +0 -0
  125. data/vite_rb.gemspec +46 -0
  126. data/yarn.lock +1215 -0
  127. metadata +337 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 4fdf3125edcc03c5871b2da86496aa4fb29f1915fbd9a617419231c3e49db2fd
4
+ data.tar.gz: 8d8d8aa54277af1f2943367e22955c1dca8fff13e5ec2d669901c1f668c4bca6
5
+ SHA512:
6
+ metadata.gz: b14932e9e675dbbc27dfe0c8e50b590a882fa0a126e7dd2cc576bf67ba7f4581f64edc60fcc1a68d9fab6871f053b2b3274f0e62fd356b29002e8f24be8bbbe5
7
+ data.tar.gz: d2aee947f31f485c3d3fc6acc32690afaa86ee54dd4e333dae101f6f8198d0c87acea26abce0c905a8564b929bead29cc2ea25cdb564a44ff46a1ddbba47859a
@@ -0,0 +1,3 @@
1
+ exclude_patterns:
2
+ - "examples/"
3
+ - "lib/snowpacker/templates/babel.config.js"
@@ -0,0 +1,22 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ public/
14
+ .cache/
15
+
16
+ log/
17
+
18
+ node_modules/
19
+
20
+ .vscode/
21
+ /tags
22
+ /examples
@@ -0,0 +1 @@
1
+ github: ParamagicDev
@@ -0,0 +1,17 @@
1
+ name: Run tests
2
+ on: [push, pull_request]
3
+ jobs:
4
+ test:
5
+ strategy:
6
+ fail-fast: false
7
+ matrix:
8
+ os: [ubuntu, macos, windows]
9
+ ruby: [2.5, 2.6, 2.7, head]
10
+ runs-on: ${{ matrix.os }}-latest
11
+ steps:
12
+ - uses: actions/checkout@v2
13
+ - uses: ruby/setup-ruby@v1
14
+ with:
15
+ ruby-version: ${{ matrix.ruby }}
16
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
17
+ - run: bundle exec rake test
@@ -0,0 +1,71 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+
10
+ # rspec failure tracking
11
+ .rspec_status
12
+
13
+ public/
14
+ .cache/
15
+
16
+ log/
17
+
18
+ *node_modules*
19
+
20
+ .vscode/
21
+ tags
22
+
23
+ # See https://help.github.com/articles/ignoring-files for more about ignoring files.
24
+ #
25
+ # If you find yourself ignoring temporary files generated by your text editor
26
+ # or operating system, you probably want to add a global ignore instead:
27
+ # git config --global core.excludesfile '~/.gitignore_global'
28
+
29
+ # Ignore bundler config.
30
+ .bundle
31
+
32
+ # Ignore the default SQLite database.
33
+ examples/*/db/*.sqlite3
34
+ examples/*/db/*.sqlite3-journal
35
+ examples/*/db/*.sqlite3-*
36
+
37
+ # Ignore all logfiles and tempfiles.
38
+ examples/**/*log/
39
+ examples/**/*tmp
40
+ !examples/**/*log/.keep
41
+ !examples/**/*tmp/.keep
42
+
43
+ # Ignore pidfiles, but keep the directory.
44
+ examples/*/tmp/pids/*
45
+ !examples/*/tmp/pids/
46
+ !examples/*/tmp/pids/.keep
47
+
48
+ # Ignore uploaded files in development.
49
+ examples/*/storage/*
50
+ !examples/*/storage/.keep
51
+
52
+ examples/*/public/assets
53
+ examples/*/.byebug_history
54
+
55
+ # Ignore master key for decrypting credentials and more.
56
+ examples/*/config/master.key
57
+
58
+ examples/**/*tmp
59
+ examples/**/public/snowpacks
60
+ examples/**/node_modules
61
+ examples/**/yarn-error.log
62
+ examples/**/yarn-debug.log*
63
+ examples/**/.yarn-integrity
64
+ examples/**/snowpacks
65
+
66
+ test/**/*tmp
67
+ test/**/*storage
68
+ test/**/*node_modules
69
+ test/**/*yarn-error.log
70
+ package/dist
71
+ Gemfile.lock
@@ -0,0 +1 @@
1
+ ruby-2.7.2
@@ -0,0 +1,16 @@
1
+ ---
2
+ include:
3
+ - "**/*.rb"
4
+ exclude:
5
+ - spec/**/*
6
+ - test/**/*
7
+ - vendor/**/*
8
+ - ".bundle/**/*"
9
+ require: []
10
+ domains: []
11
+ reporters:
12
+ - rubocop
13
+ - require_not_found
14
+ require_paths: []
15
+ plugins: []
16
+ max_files: 5000
@@ -0,0 +1,11 @@
1
+ fix: true # default: false
2
+ parallel: true # default: false
3
+ format: progress # default: Standard::Formatter
4
+ default_ignores: true # default: true
5
+
6
+ ignore: # default: []
7
+ - 'db/schema.rb'
8
+ - '**/*node_modules/**/*'
9
+ - 'vendor/**/*'
10
+ - 'test/**/*':
11
+ - Layout/AlignHash
@@ -0,0 +1,65 @@
1
+ <a name="2020-07-27"></a>
2
+ ### 2020-07-27
3
+
4
+
5
+ #### Bug Fixes
6
+
7
+ * move detect_port! into dev command ([b93f029](/../../commit/b93f029))
8
+ * add sourcing of docker.env ([66838ac](/../../commit/66838ac))
9
+
10
+
11
+ <a name="2020-07-26"></a>
12
+ ### 2020-07-26
13
+
14
+
15
+ #### Features
16
+
17
+ * add postcss packages ([783adf8](/../../commit/783adf8))
18
+ * allow for an encapsulated postcss & babel config ([f95e15a](/../../commit/f95e15a))
19
+ * add @snowpack/babel-plugin-package-import for transforming imports ([596df4a](/../../commit/596df4a))
20
+ * add postcss and babel config attrs to configuration ([f0d51b6](/../../commit/f0d51b6))
21
+ * add @snowpack/plugin-babel to generator ([3a7d872](/../../commit/3a7d872))
22
+ * generate configs with generator ([1906a31](/../../commit/1906a31))
23
+ * add babel and postcss configs to templates ([a0b0ec4](/../../commit/a0b0ec4))
24
+
25
+
26
+ #### Bug Fixes
27
+
28
+ * **config**
29
+ * fix issue with configuration.rb, generate config ([3d6a8f1](/../../commit/3d6a8f1))
30
+
31
+ * **generator**
32
+ * now properly generates files ([ba62564](/../../commit/ba62564))
33
+
34
+ * use the preset node_env prior to setting one. ([abe788a](/../../commit/abe788a))
35
+ * Env now respects user set env vars ([588b41f](/../../commit/588b41f))
36
+
37
+
38
+ <a name="2020-07-24"></a>
39
+ ### 2020-07-24
40
+
41
+
42
+ #### Features
43
+
44
+ * add an example of using stylesheet link tags ([889f241](/../../commit/889f241))
45
+ * add a mount directory configuration ([c8556d7](/../../commit/c8556d7))
46
+ * add a compile rake task ([607ef29](/../../commit/607ef29))
47
+ * updating templates ([e126948](/../../commit/e126948))
48
+ * rewrite snowpack.config to js format ([e6f89aa](/../../commit/e6f89aa))
49
+ * allow users to define a hostname and port ([95ff03b](/../../commit/95ff03b))
50
+ * add rack-proxy for proxy requests ([8635324](/../../commit/8635324))
51
+ * add snowpacks to example directory ([bb3f1e9](/../../commit/bb3f1e9))
52
+ * have the runner specify a node_env ([5f97e9a](/../../commit/5f97e9a))
53
+ * modify generators and update readme ([a305177](/../../commit/a305177))
54
+ * Add a prior-to-install directory ([fbca36d](/../../commit/fbca36d))
55
+ * add docker ([945d27b](/../../commit/945d27b))
56
+
57
+ #### Bug Fixes
58
+
59
+ * gitignore to ignore node_modules ([e1ee78d](/../../commit/e1ee78d))
60
+ * remove parcel-bundler, remove .travis.yml ([08ecb2a](/../../commit/08ecb2a))
61
+
62
+ * **gitignore**
63
+ * ignore tags ([890ce35](/../../commit/890ce35))
64
+
65
+
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
6
+
7
+ # Specify your gem's dependencies in snowpacker.gemspec
8
+ gemspec
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2018 Michał Darda
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,258 @@
1
+ # Vite
2
+
3
+ ## WORK IN PROGRESS
4
+
5
+ If you would like to help support the future of this project,
6
+ please consider sponsoring me so I can keep a regular stream
7
+ of updates and fixes to this project.
8
+
9
+ https://github.com/sponsors/ParamagicDev
10
+
11
+ Please note, that this project is still in it's infancy. Feel free to
12
+ file bug reports, issues, and feature requests.
13
+
14
+ [![Gem Version](https://badge.fury.io/rb/vite_rb.svg)](https://badge.fury.io/rb/vite_rb)
15
+
16
+ <!-- [![Maintainability](https://api.codeclimate.com/v1/badges/b88ac1a56d868d4f23d5/maintainability)](https://codeclimate.com/github/ParamagicDev/vite_rb/maintainability) -->
17
+
18
+ This gem integrates the [Vite](https://vitejs.dev/) JS module bundler into
19
+ your Rails / Ruby application. It is inspired by gems such as
20
+ [breakfast](https://github.com/devlocker/breakfast) /
21
+ [webpacker](https://github.com/rails/webpacker) and this project started
22
+ as a fork of
23
+ [Vite](https://github.com/ParamagicDev/vite_rb).
24
+
25
+ This is not meant to be a 1:1 replacement of Webpacker. ViteRb is
26
+ actually just a wrapper around Vite using Rake / Thor and as a result can
27
+ be used with any Rack based framework. Vite comes with first class
28
+ support for Rails including Generators and autoloaded helpers.
29
+
30
+ ## How is Vite different?
31
+
32
+ Vite is unbundled during development to eliminate compilation
33
+ times. Asset requests are cached with 304 headers. Bundling is saved for the final build process due to waterfall
34
+ network requests that still cause some issues in production and can
35
+ cause significant slowdown.
36
+
37
+ Vite uses the native ESM module spec. ESM Modules are fast,
38
+ lightweight, and natively supported by all newer browsers ("evergreen browsers")
39
+ For more reading on ESM modules, check out this link:
40
+
41
+ [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Modules)
42
+
43
+
44
+ ## Installation
45
+
46
+ Add this line to your application's Gemfile:
47
+
48
+ ```ruby
49
+ gem 'vite_rb', git: "https://github.com/ParamagicDev/vite_rb"
50
+ ```
51
+
52
+ ### With Rails
53
+
54
+ ```bash
55
+ rails vite:init
56
+ ```
57
+
58
+ Which will install your yarn packages, create an initializer file, add config files, and create an `app/vite` directory similar to Webpacker.
59
+
60
+ #### Tasks
61
+
62
+ ```bash
63
+ rails vite:dev # starts a dev server
64
+ rails vite:build # builds for production (is hooked onto
65
+ precompile)
66
+ rails assets:precompile # will build vite and the asset pipeline
67
+ ```
68
+
69
+ #### Existing Rails app
70
+
71
+ When working with a new Rails app, it is important to switch any webpack
72
+ `require` statements to ESM-based `import`. For example, consider the
73
+ following javascript file:
74
+
75
+ ```diff
76
+ // app/javascript/packs/application.js
77
+
78
+ - // Webpack
79
+ - require("@rails/ujs").start()
80
+ - require("turbolinks").start()
81
+ - require("@rails/activestorage").start()
82
+ - require("channels")
83
+ -
84
+ + // app/vite/entrypoints/applications.js
85
+ + import "@rails/ujs" // Autostarts
86
+ + import Turbolinks from "turbolinks"
87
+ + import ActiveStorage from "@rails/activestorage"
88
+ + import "../channels"
89
+ +
90
+ + Turbolinks.start()
91
+ + ActiveStorage.start()
92
+ ```
93
+
94
+ You may notice a `require.context` statement in your javascript to load
95
+ `channels`. This runs via Node and is not browser compatible. Vite comes
96
+ with a glob import syntax, you can read about it here: @TODO
97
+
98
+ ```diff
99
+ // app/javascript/channels/index.js
100
+
101
+ // Load all the channels within this directory and all subdirectories.
102
+ // Channel files must be named *_channel.js.
103
+
104
+ - const channels = require.context('.', true, /_channel\.js$/)
105
+ - channels.keys().forEach(channels)
106
+ // @TODO
107
+ ```
108
+
109
+ ## File Structure
110
+
111
+ Vite makes some assumptions about your file paths to provide
112
+ helper methods.
113
+
114
+ ```bash
115
+ tree -L 2 app/vite
116
+
117
+ app/vite/
118
+ ├── assets/
119
+ │   └── picture.png
120
+ ├── channels/
121
+ │   ├── consumer.js
122
+ │   └── index.js
123
+ ├── entrypoints/
124
+ │   └── application.js
125
+ ├── javascript/
126
+ │   └── index.js
127
+ └── stylesheets/
128
+ └── index.css
129
+ ```
130
+
131
+ Which upon build will output to look like this:
132
+
133
+ ```bash
134
+ tree -L 1 public/Vites
135
+
136
+ public/vite/
137
+ ├── assets/
138
+ ├── channels/
139
+ ├── entrypoints/
140
+ ├── javascript/
141
+ ├── css/
142
+ ```
143
+
144
+ ## Helpers
145
+
146
+ ### Generic Helper
147
+
148
+ `<%= vite_path %>` will return the value of
149
+ `Vite.config.output_dir`
150
+
151
+ ### Assets
152
+
153
+ Assets can be accessed via `<%= vite_asset_path("name", **options) %>` and accepts all
154
+ the same params as [#asset_path](https://api.rubyonrails.org/classes/ActionView/Helpers/AssetUrlHelper.html#method-i-asset_path)
155
+
156
+ ### Channels
157
+
158
+ Channels have no special helper.
159
+
160
+ ### Packs
161
+
162
+ Packs can be accessed via:
163
+
164
+ `<%= javascript_vite_tag %>` and works the same as
165
+ [`#javascript_include_tag`](https://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-javascript_include_tag)
166
+
167
+ `packs` are your "entrypoints" and where files get bundled to, very
168
+ similar to Webpacker.
169
+
170
+ ### Javascript
171
+
172
+ Javascript files have no special helper.
173
+
174
+ ### Stylesheets
175
+
176
+ Stylesheets can be accessed via:
177
+
178
+ `<%= stylesheet_vite_tag %>` and works just like
179
+ [`#stylesheet_link_tag`](https://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html#method-i-stylesheet_link_tag).
180
+ I recommend importing your css in your `packs` file if you plan on
181
+ changing it to support HMR.
182
+
183
+ ### HMR
184
+
185
+ To enable HMR for your vite assets, put the following in the `<head>` of
186
+ your document:
187
+
188
+ `<%= vite_hmr_tag %>`
189
+
190
+ ## Configuration
191
+
192
+ After running generator, the configuration file can be found in
193
+ `config/initializers/vite.rb`
194
+
195
+ In addition, all related `vite.config.js`, and
196
+ `postcss.config.js` can all be found in the `config/vite`
197
+ directory.
198
+
199
+ ## Production
200
+
201
+ ViteRb hooks up to the `rails assets:precompile` and `rails
202
+ assets:clobber`, so no special setup is required.
203
+
204
+ You can start vite_rb's compilation process manually by running
205
+
206
+ ```bash
207
+ rails vite:compile
208
+
209
+ # OR
210
+
211
+ rails vite:build
212
+ ```
213
+
214
+
215
+ ## Examples
216
+
217
+ Examples can be found in the [/examples](/examples) directory.
218
+
219
+ ## Converting from Webpack to Snowpack
220
+
221
+ - `require.context()` is not currently supported
222
+
223
+ Instead, use the glob syntax from [Vite](https://vitejs.dev)
224
+
225
+ ## Issues
226
+
227
+ Not all packages may be compatible with Vite. Please check
228
+ [skypack.dev](https://skypack.dev) for ESM-compatible packages.
229
+
230
+ ## Changelog
231
+
232
+ See [CHANGELOG.md](https://github.com/ParamagicDev/vite_rb/blob/master/CHANGELOG.md)
233
+
234
+ ## Contributing
235
+
236
+ Bug reports and pull requests are welcome on GitHub at https://github.com/ParamagicDev/vite_rb.
237
+
238
+ ## License
239
+
240
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
241
+
242
+ ## Roadmap
243
+
244
+ - [ ] Add default file structure with init
245
+
246
+ - [x] Support require.context (Glob importing supported by Vite)
247
+
248
+ - [ ] Reading from production manifest
249
+
250
+ - [ ] Parity with Webpacker helper methods
251
+
252
+ - [ ] Add documentation / installation on Stimulus
253
+
254
+ - [ ] Create an npm package to read a default config from and pin Vite versions
255
+
256
+ - [ ] Add in End-to-end testing to confirm everything works as intended.
257
+
258
+ - [ ] Make the config environment from NPM in Typescript so users can import types for good completion.