Class: Rolemodel::WebpackGenerator

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

Constant Summary collapse

DEV_DEPS =
%w[
  @honeybadger-io/webpack
  @honeybadger-io/js
  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



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

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



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

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

#ensure_node_versionObject



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

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



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

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

#honeybadger_setupObject



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

def honeybadger_setup
  say 'Setting up Honeybadger for JS error reporting', :green

  copy_file 'app/javascript/initializers/honeybadger.js'
  append_to_file 'app/javascript/application.js', <<~JS
    import './initializers/honeybadger'
  JS
end

#remove_obsolete_javascript_dependenciesObject



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

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



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

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