initial react setup
This commit is contained in:
7
.gitignore
vendored
7
.gitignore
vendored
@@ -38,3 +38,10 @@
|
|||||||
/flamegraph.svg
|
/flamegraph.svg
|
||||||
/app/assets/builds/*
|
/app/assets/builds/*
|
||||||
!/app/assets/builds/.keep
|
!/app/assets/builds/.keep
|
||||||
|
|
||||||
|
/public/packs
|
||||||
|
/public/packs-test
|
||||||
|
/node_modules
|
||||||
|
/yarn-error.log
|
||||||
|
yarn-debug.log*
|
||||||
|
.yarn-integrity
|
||||||
|
|||||||
7
Gemfile
7
Gemfile
@@ -20,8 +20,8 @@ gem "pry-stack_explorer"
|
|||||||
# Use the Puma web server [https://github.com/puma/puma]
|
# Use the Puma web server [https://github.com/puma/puma]
|
||||||
gem "puma", "~> 5.0"
|
gem "puma", "~> 5.0"
|
||||||
|
|
||||||
# Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
|
# # Use JavaScript with ESM import maps [https://github.com/rails/importmap-rails]
|
||||||
gem "importmap-rails"
|
# gem "importmap-rails"
|
||||||
|
|
||||||
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
# Hotwire's SPA-like page accelerator [https://turbo.hotwired.dev]
|
||||||
gem "turbo-rails"
|
gem "turbo-rails"
|
||||||
@@ -113,3 +113,6 @@ end
|
|||||||
# gem "pg_party"
|
# gem "pg_party"
|
||||||
|
|
||||||
gem "tailwindcss-rails", "~> 2.0"
|
gem "tailwindcss-rails", "~> 2.0"
|
||||||
|
|
||||||
|
gem "react-rails"
|
||||||
|
gem "shakapacker"
|
||||||
|
|||||||
27
Gemfile.lock
27
Gemfile.lock
@@ -78,6 +78,10 @@ GEM
|
|||||||
tzinfo (~> 2.0)
|
tzinfo (~> 2.0)
|
||||||
addressable (2.8.1)
|
addressable (2.8.1)
|
||||||
public_suffix (>= 2.0.2, < 6.0)
|
public_suffix (>= 2.0.2, < 6.0)
|
||||||
|
babel-source (5.8.35)
|
||||||
|
babel-transpiler (0.7.0)
|
||||||
|
babel-source (>= 4.0, < 6)
|
||||||
|
execjs (~> 2.0)
|
||||||
bindex (0.8.1)
|
bindex (0.8.1)
|
||||||
binding_of_caller (1.0.0)
|
binding_of_caller (1.0.0)
|
||||||
debug_inspector (>= 0.0.1)
|
debug_inspector (>= 0.0.1)
|
||||||
@@ -100,6 +104,7 @@ GEM
|
|||||||
concurrent-ruby (~> 1.2.0)
|
concurrent-ruby (~> 1.2.0)
|
||||||
concurrent-ruby-ext (1.2.0)
|
concurrent-ruby-ext (1.2.0)
|
||||||
concurrent-ruby (= 1.2.0)
|
concurrent-ruby (= 1.2.0)
|
||||||
|
connection_pool (2.4.0)
|
||||||
crass (1.0.6)
|
crass (1.0.6)
|
||||||
curb (1.0.5)
|
curb (1.0.5)
|
||||||
daemons (1.4.1)
|
daemons (1.4.1)
|
||||||
@@ -120,6 +125,7 @@ GEM
|
|||||||
erubi (1.12.0)
|
erubi (1.12.0)
|
||||||
et-orbi (1.2.7)
|
et-orbi (1.2.7)
|
||||||
tzinfo
|
tzinfo
|
||||||
|
execjs (2.8.1)
|
||||||
faiss (0.2.5)
|
faiss (0.2.5)
|
||||||
numo-narray
|
numo-narray
|
||||||
rice (>= 4.0.2)
|
rice (>= 4.0.2)
|
||||||
@@ -142,9 +148,6 @@ GEM
|
|||||||
domain_name (~> 0.5)
|
domain_name (~> 0.5)
|
||||||
i18n (1.12.0)
|
i18n (1.12.0)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
importmap-rails (1.1.5)
|
|
||||||
actionpack (>= 6.0.0)
|
|
||||||
railties (>= 6.0.0)
|
|
||||||
influxdb-client (2.9.0)
|
influxdb-client (2.9.0)
|
||||||
io-console (0.6.0)
|
io-console (0.6.0)
|
||||||
irb (1.6.2)
|
irb (1.6.2)
|
||||||
@@ -215,6 +218,8 @@ GEM
|
|||||||
rack (2.2.6.2)
|
rack (2.2.6.2)
|
||||||
rack-mini-profiler (3.0.0)
|
rack-mini-profiler (3.0.0)
|
||||||
rack (>= 1.2.0)
|
rack (>= 1.2.0)
|
||||||
|
rack-proxy (0.7.6)
|
||||||
|
rack
|
||||||
rack-test (2.0.2)
|
rack-test (2.0.2)
|
||||||
rack (>= 1.3)
|
rack (>= 1.3)
|
||||||
rails (7.0.4.2)
|
rails (7.0.4.2)
|
||||||
@@ -248,6 +253,12 @@ GEM
|
|||||||
thor (~> 1.0)
|
thor (~> 1.0)
|
||||||
zeitwerk (~> 2.5)
|
zeitwerk (~> 2.5)
|
||||||
rake (13.0.6)
|
rake (13.0.6)
|
||||||
|
react-rails (2.6.2)
|
||||||
|
babel-transpiler (>= 0.7.0)
|
||||||
|
connection_pool
|
||||||
|
execjs
|
||||||
|
railties (>= 3.2)
|
||||||
|
tilt
|
||||||
regexp_parser (2.6.2)
|
regexp_parser (2.6.2)
|
||||||
reline (0.3.2)
|
reline (0.3.2)
|
||||||
io-console (~> 0.5)
|
io-console (~> 0.5)
|
||||||
@@ -282,6 +293,12 @@ GEM
|
|||||||
websocket (~> 1.0)
|
websocket (~> 1.0)
|
||||||
semantic_logger (4.13.0)
|
semantic_logger (4.13.0)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
|
semantic_range (3.0.0)
|
||||||
|
shakapacker (6.6.0)
|
||||||
|
activesupport (>= 5.2)
|
||||||
|
rack-proxy (>= 0.6.1)
|
||||||
|
railties (>= 5.2)
|
||||||
|
semantic_range (>= 2.3.0)
|
||||||
sprockets (4.2.0)
|
sprockets (4.2.0)
|
||||||
concurrent-ruby (~> 1.0)
|
concurrent-ruby (~> 1.0)
|
||||||
rack (>= 2.2.4, < 4)
|
rack (>= 2.2.4, < 4)
|
||||||
@@ -297,6 +314,7 @@ GEM
|
|||||||
tailwindcss-rails (2.0.26)
|
tailwindcss-rails (2.0.26)
|
||||||
railties (>= 6.0.0)
|
railties (>= 6.0.0)
|
||||||
thor (1.2.1)
|
thor (1.2.1)
|
||||||
|
tilt (2.1.0)
|
||||||
timeout (0.3.1)
|
timeout (0.3.1)
|
||||||
turbo-rails (1.3.3)
|
turbo-rails (1.3.3)
|
||||||
actionpack (>= 6.0.0)
|
actionpack (>= 6.0.0)
|
||||||
@@ -345,7 +363,6 @@ DEPENDENCIES
|
|||||||
good_job
|
good_job
|
||||||
htmlbeautifier
|
htmlbeautifier
|
||||||
http-cookie
|
http-cookie
|
||||||
importmap-rails
|
|
||||||
influxdb-client
|
influxdb-client
|
||||||
jbuilder
|
jbuilder
|
||||||
kaminari
|
kaminari
|
||||||
@@ -360,12 +377,14 @@ DEPENDENCIES
|
|||||||
rails (~> 7.0.4, >= 7.0.4.2)
|
rails (~> 7.0.4, >= 7.0.4.2)
|
||||||
rails_semantic_logger
|
rails_semantic_logger
|
||||||
rb-bsdiff!
|
rb-bsdiff!
|
||||||
|
react-rails
|
||||||
ripcord
|
ripcord
|
||||||
rspec-rails
|
rspec-rails
|
||||||
ruby-prof
|
ruby-prof
|
||||||
ruby-prof-speedscope
|
ruby-prof-speedscope
|
||||||
rufo
|
rufo
|
||||||
selenium-webdriver
|
selenium-webdriver
|
||||||
|
shakapacker
|
||||||
sprockets-rails
|
sprockets-rails
|
||||||
sqlite3 (~> 1.4)
|
sqlite3 (~> 1.4)
|
||||||
stimulus-rails
|
stimulus-rails
|
||||||
|
|||||||
@@ -1,2 +1,3 @@
|
|||||||
web: bin/rails server -p 3000
|
web: bin/rails server -p 3000
|
||||||
css: bin/rails tailwindcss:watch
|
css: bin/rails tailwindcss:watch
|
||||||
|
shakapacker: bin/webpacker-dev-server
|
||||||
@@ -1,3 +0,0 @@
|
|||||||
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
|
|
||||||
import "@hotwired/turbo-rails"
|
|
||||||
import "controllers"
|
|
||||||
0
app/javascript/components/.keep
Normal file
0
app/javascript/components/.keep
Normal file
@@ -1,9 +0,0 @@
|
|||||||
import { Application } from "@hotwired/stimulus"
|
|
||||||
|
|
||||||
const application = Application.start()
|
|
||||||
|
|
||||||
// Configure Stimulus development experience
|
|
||||||
application.debug = false
|
|
||||||
window.Stimulus = application
|
|
||||||
|
|
||||||
export { application }
|
|
||||||
@@ -1,7 +0,0 @@
|
|||||||
import { Controller } from "@hotwired/stimulus"
|
|
||||||
|
|
||||||
export default class extends Controller {
|
|
||||||
connect() {
|
|
||||||
this.element.textContent = "Hello World!"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
// Import and register all your controllers from the importmap under controllers/*
|
|
||||||
|
|
||||||
import { application } from "controllers/application"
|
|
||||||
|
|
||||||
// Eager load all controllers defined in the import map under controllers/**/*_controller
|
|
||||||
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
|
||||||
eagerLoadControllersFrom("controllers", application)
|
|
||||||
|
|
||||||
// Lazy load controllers as they appear in the DOM (remember not to preload controllers in import map!)
|
|
||||||
// import { lazyLoadControllersFrom } from "@hotwired/stimulus-loading"
|
|
||||||
// lazyLoadControllersFrom("controllers", application)
|
|
||||||
4
app/javascript/packs/application.js
Normal file
4
app/javascript/packs/application.js
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
// Support component names relative to this directory:
|
||||||
|
var componentRequireContext = require.context("components", true);
|
||||||
|
var ReactRailsUJS = require("react_ujs");
|
||||||
|
ReactRailsUJS.useContext(componentRequireContext);
|
||||||
5
app/javascript/packs/server_rendering.js
Normal file
5
app/javascript/packs/server_rendering.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
// By default, this pack is loaded for server-side rendering.
|
||||||
|
// It must expose react_ujs as `ReactRailsUJS` and prepare a require context.
|
||||||
|
var componentRequireContext = require.context("components", true);
|
||||||
|
var ReactRailsUJS = require("react_ujs");
|
||||||
|
ReactRailsUJS.useContext(componentRequireContext);
|
||||||
@@ -7,8 +7,8 @@
|
|||||||
<%= csp_meta_tag %>
|
<%= csp_meta_tag %>
|
||||||
<%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>
|
<%= stylesheet_link_tag "tailwind", "inter-font", "data-turbo-track": "reload" %>
|
||||||
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
|
<%= stylesheet_link_tag "application", "data-turbo-track": "reload" %>
|
||||||
<%= javascript_importmap_tags %>
|
|
||||||
<%= yield :head %>
|
<%= yield :head %>
|
||||||
|
<%= javascript_pack_tag "application" %>
|
||||||
</head>
|
</head>
|
||||||
<body class="h-full mx-0">
|
<body class="h-full mx-0">
|
||||||
<header class="bg-slate-100 border-slate-200 border-b-2">
|
<header class="bg-slate-100 border-slate-200 border-b-2">
|
||||||
|
|||||||
@@ -17,6 +17,9 @@ FileUtils.chdir APP_ROOT do
|
|||||||
system! "gem install bundler --conservative"
|
system! "gem install bundler --conservative"
|
||||||
system("bundle check") || system!("bundle install")
|
system("bundle check") || system!("bundle install")
|
||||||
|
|
||||||
|
# Install JavaScript dependencies
|
||||||
|
system!("bin/yarn")
|
||||||
|
|
||||||
# puts "\n== Copying sample files =="
|
# puts "\n== Copying sample files =="
|
||||||
# unless File.exist?("config/database.yml")
|
# unless File.exist?("config/database.yml")
|
||||||
# FileUtils.cp "config/database.yml.sample", "config/database.yml"
|
# FileUtils.cp "config/database.yml.sample", "config/database.yml"
|
||||||
|
|||||||
13
bin/webpacker
Executable file
13
bin/webpacker
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
ENV["RAILS_ENV"] ||= "development"
|
||||||
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
||||||
|
|
||||||
|
require "bundler/setup"
|
||||||
|
require "webpacker"
|
||||||
|
require "webpacker/webpack_runner"
|
||||||
|
|
||||||
|
APP_ROOT = File.expand_path("..", __dir__)
|
||||||
|
Dir.chdir(APP_ROOT) do
|
||||||
|
Webpacker::WebpackRunner.run(ARGV)
|
||||||
|
end
|
||||||
13
bin/webpacker-dev-server
Executable file
13
bin/webpacker-dev-server
Executable file
@@ -0,0 +1,13 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
ENV["RAILS_ENV"] ||= "development"
|
||||||
|
ENV["BUNDLE_GEMFILE"] ||= File.expand_path("../../Gemfile", __FILE__)
|
||||||
|
|
||||||
|
require "bundler/setup"
|
||||||
|
require "webpacker"
|
||||||
|
require "webpacker/dev_server_runner"
|
||||||
|
|
||||||
|
APP_ROOT = File.expand_path("..", __dir__)
|
||||||
|
Dir.chdir(APP_ROOT) do
|
||||||
|
Webpacker::DevServerRunner.run(ARGV)
|
||||||
|
end
|
||||||
18
bin/yarn
Executable file
18
bin/yarn
Executable file
@@ -0,0 +1,18 @@
|
|||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
APP_ROOT = File.expand_path("..", __dir__)
|
||||||
|
Dir.chdir(APP_ROOT) do
|
||||||
|
yarn = ENV["PATH"].split(File::PATH_SEPARATOR).
|
||||||
|
select { |dir| File.expand_path(dir) != __dir__ }.
|
||||||
|
product(["yarn", "yarnpkg", "yarn.cmd", "yarn.ps1"]).
|
||||||
|
map { |dir, file| File.expand_path(file, dir) }.
|
||||||
|
find { |file| File.executable?(file) }
|
||||||
|
|
||||||
|
if yarn
|
||||||
|
exec yarn, *ARGV
|
||||||
|
else
|
||||||
|
$stderr.puts "Yarn executable was not detected in the system."
|
||||||
|
$stderr.puts "Download Yarn at https://yarnpkg.com/en/docs/install"
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
end
|
||||||
5
config/webpack/webpack.config.js
Normal file
5
config/webpack/webpack.config.js
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
const { webpackConfig } = require('shakapacker')
|
||||||
|
|
||||||
|
// See the shakacode/shakapacker README and docs directory for advice on customizing your webpackConfig.
|
||||||
|
|
||||||
|
module.exports = webpackConfig
|
||||||
104
config/webpacker.yml
Normal file
104
config/webpacker.yml
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
# Note: You must restart bin/webpacker-dev-server for changes to take effect
|
||||||
|
|
||||||
|
default: &default
|
||||||
|
source_path: app/javascript
|
||||||
|
|
||||||
|
# You can have a subdirectory of the source_path, like 'packs' (recommended).
|
||||||
|
# Alternatively, you can use '/' to use the whole source_path directory.
|
||||||
|
source_entry_path: packs/
|
||||||
|
|
||||||
|
# If nested_entries is true, then we'll pick up subdirectories within the source_entry_path.
|
||||||
|
# You cannot set this option to true if you set source_entry_path to '/'
|
||||||
|
nested_entries: false
|
||||||
|
|
||||||
|
# While using a File-System-based automated bundle generation feature, miscellaneous warnings suggesting css order
|
||||||
|
# conflicts may arise due to the mini-css-extract-plugin. For projects where css ordering has been mitigated through
|
||||||
|
# consistent use of scoping or naming conventions, the css order warnings can be disabled by setting
|
||||||
|
# css_extract_ignore_order_warnings to true
|
||||||
|
css_extract_ignore_order_warnings: false
|
||||||
|
|
||||||
|
public_root_path: public
|
||||||
|
public_output_path: packs
|
||||||
|
cache_path: tmp/webpacker
|
||||||
|
webpack_compile_output: true
|
||||||
|
# See https://github.com/shakacode/shakapacker#deployment
|
||||||
|
webpacker_precompile: true
|
||||||
|
|
||||||
|
# Location for manifest.json, defaults to {public_output_path}/manifest.json if unset
|
||||||
|
# manifest_path: public/packs/manifest.json
|
||||||
|
|
||||||
|
# Additional paths webpack should look up modules
|
||||||
|
# ['app/assets', 'engine/foo/app/assets']
|
||||||
|
additional_paths: []
|
||||||
|
|
||||||
|
# Reload manifest.json on all requests so we reload latest compiled packs
|
||||||
|
cache_manifest: false
|
||||||
|
|
||||||
|
# Select loader to use, available options are 'babel' (default), 'swc' or 'esbuild'
|
||||||
|
webpack_loader: "babel"
|
||||||
|
|
||||||
|
# Set to true to enable check for matching versions of shakapacker gem and NPM package - will raise an error if there is a mismatch or wildcard versioning is used
|
||||||
|
ensure_consistent_versioning: false
|
||||||
|
|
||||||
|
# Select whether the compiler will use SHA digest ('digest' option) or most most recent modified timestamp ('mtime') to determine freshness
|
||||||
|
compiler_strategy: digest
|
||||||
|
|
||||||
|
development:
|
||||||
|
<<: *default
|
||||||
|
compile: true
|
||||||
|
compiler_strategy: mtime
|
||||||
|
|
||||||
|
# Reference: https://webpack.js.org/configuration/dev-server/
|
||||||
|
# Keys not described there are documented inline and in https://github.com/shakacode/shakapacker/
|
||||||
|
dev_server:
|
||||||
|
https: false
|
||||||
|
host: localhost
|
||||||
|
port: 3035
|
||||||
|
# Hot Module Replacement updates modules while the application is running without a full reload
|
||||||
|
# Used instead of the `hot` key in https://webpack.js.org/configuration/dev-server/#devserverhot
|
||||||
|
hmr: false
|
||||||
|
# If HMR is on, CSS will by inlined by delivering it as part of the script payload via style-loader. Be sure
|
||||||
|
# that you add style-loader to your project dependencies.
|
||||||
|
#
|
||||||
|
# If you want to instead deliver CSS via <link> with the mini-css-extract-plugin, set inline_css to false.
|
||||||
|
# In that case, style-loader is not needed as a dependency.
|
||||||
|
#
|
||||||
|
# mini-css-extract-plugin is a required dependency in both cases.
|
||||||
|
inline_css: true
|
||||||
|
# Defaults to the inverse of hmr. Uncomment to manually set this.
|
||||||
|
# live_reload: true
|
||||||
|
client:
|
||||||
|
# Should we show a full-screen overlay in the browser when there are compiler errors or warnings?
|
||||||
|
overlay: true
|
||||||
|
# May also be a string
|
||||||
|
# webSocketURL:
|
||||||
|
# hostname: '0.0.0.0'
|
||||||
|
# pathname: '/ws'
|
||||||
|
# port: 8080
|
||||||
|
# Should we use gzip compression?
|
||||||
|
compress: true
|
||||||
|
# Note that apps that do not check the host are vulnerable to DNS rebinding attacks
|
||||||
|
allowed_hosts: "all"
|
||||||
|
# Shows progress and colorizes output of bin/webpacker[-dev-server]
|
||||||
|
pretty: true
|
||||||
|
headers:
|
||||||
|
"Access-Control-Allow-Origin": "*"
|
||||||
|
static:
|
||||||
|
watch:
|
||||||
|
ignored: "**/node_modules/**"
|
||||||
|
|
||||||
|
test:
|
||||||
|
<<: *default
|
||||||
|
compile: true
|
||||||
|
|
||||||
|
# Compile test packs to a separate directory
|
||||||
|
public_output_path: packs-test
|
||||||
|
|
||||||
|
production:
|
||||||
|
<<: *default
|
||||||
|
|
||||||
|
# Production depends on precompilation of packs prior to booting for performance.
|
||||||
|
compile: false
|
||||||
|
|
||||||
|
# Cache manifest.json for performance
|
||||||
|
cache_manifest: true
|
||||||
38
package.json
Normal file
38
package.json
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"name": "app",
|
||||||
|
"private": true,
|
||||||
|
"dependencies": {
|
||||||
|
"@babel/core": "7",
|
||||||
|
"@babel/plugin-transform-runtime": "7",
|
||||||
|
"@babel/preset-env": "7",
|
||||||
|
"@babel/preset-react": "^7.18.6",
|
||||||
|
"@babel/runtime": "7",
|
||||||
|
"babel-loader": "8",
|
||||||
|
"compression-webpack-plugin": "9",
|
||||||
|
"css-loader": "^6.7.3",
|
||||||
|
"css-minimizer-webpack-plugin": "^5.0.0",
|
||||||
|
"mini-css-extract-plugin": "^2.7.5",
|
||||||
|
"prop-types": "^15.8.1",
|
||||||
|
"react": "^18.2.0",
|
||||||
|
"react-dom": "^18.2.0",
|
||||||
|
"react_ujs": "^2.6.2",
|
||||||
|
"shakapacker": "6.6.0",
|
||||||
|
"style-loader": "^3.3.2",
|
||||||
|
"terser-webpack-plugin": "5",
|
||||||
|
"webpack": "5",
|
||||||
|
"webpack-assets-manifest": "5",
|
||||||
|
"webpack-cli": "4",
|
||||||
|
"webpack-dev-server": "^4.13.2",
|
||||||
|
"webpack-merge": "5"
|
||||||
|
},
|
||||||
|
"version": "0.1.0",
|
||||||
|
"babel": {
|
||||||
|
"presets": [
|
||||||
|
"./node_modules/shakapacker/package/babel/preset.js",
|
||||||
|
"@babel/preset-react"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"browserslist": [
|
||||||
|
"defaults"
|
||||||
|
]
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user