Class: Rolemodel::WebpackGenerator

Inherits:
GeneratorBase
  • Object
show all
Defined in:
lib/generators/rolemodel/webpack/webpack_generator.rb

Constant Summary collapse

DEV_DEPS =
%w[
  esbuild
  esbuild-loader
  webpack
  webpack-cli
]
POSTCSS_PKGS =
%w[
  @csstools/postcss-sass
  postcss
  postcss-loader
  postcss-preset-env
  postcss-scss
]
WEBPACK_CSS_PKGS =
%w[
  css-loader
  css-minimizer-webpack-plugin
  mini-css-extract-plugin
]

Instance Method Summary collapse

Instance Method Details

#add_npm_packagesObject



53
54
55
56
57
58
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 53

def add_npm_packages
  say 'Adding new dev dependencies to package.json', :green

  dependencies = DEV_DEPS + POSTCSS_PKGS + WEBPACK_CSS_PKGS
  run "yarn add --dev #{dependencies.join(' ')}"
end

#add_webpack_configObject



67
68
69
70
71
72
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 67

def add_webpack_config
  say 'Copying PostCSS & Webpack config files', :green

  copy_file 'postcss.config.cjs', force: true
  copy_file 'webpack.config.js', force: true
end

#enable_corepack_and_yarnObject



35
36
37
38
39
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 35

def enable_corepack_and_yarn
  say 'Enabling Corepack and pinning the project to Yarn 4+', :green

  ensure_yarn
end

#ensure_node_versionObject



29
30
31
32
33
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 29

def ensure_node_version
  say "Establish development environment Node version of #{set_color(NODE_VERSION, :yellow)}", :green

  create_file '.node-version', NODE_VERSION, force: true
end

#force_node_to_use_es_modulesObject



41
42
43
44
45
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 41

def force_node_to_use_es_modules
  say 'Configuring project to use ES Modules instead of CommonJS', :green

  run 'npm pkg set type=module'
end

#remove_obsolete_javascript_dependenciesObject



47
48
49
50
51
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 47

def remove_obsolete_javascript_dependencies
  say 'Removing webpack & webpack-cli from package.json dependencies', :green

  run 'yarn remove webpack webpack-cli'
end

#replace_css_entrypoint_with_scssObject



60
61
62
63
64
65
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 60

def replace_css_entrypoint_with_scss
  say 'Replacing CSS entrypoint file with SCSS version', :green

  remove_file 'app/assets/stylesheets/application.css'
  copy_file 'app/assets/stylesheets/application.scss'
end

#run_sentry_generatorObject

All Sentry concerns (including wiring its plugin into webpack.config.js) live in the Sentry generator; this option is a convenience for setting up both in one run. Runs last so webpack.config.js exists before the Sentry generator injects into it.



78
79
80
81
82
# File 'lib/generators/rolemodel/webpack/webpack_generator.rb', line 78

def run_sentry_generator
  return unless options.sentry?

  generate 'rolemodel:sentry'
end