If you're using this project and you like it, please give us a star! Thanks!
If you're building an e-commerce site, like printivity.com or a marketplace site like datacenters.com and Hawaii Chee, and you want to use Rails and React, please get in touch, as that is ShakaCode's speciality. We built those sites!
Intersted in optimizing your webpack setup for React on Rails including code splitting with react-router v4, webpack v4, and react-loadable? Contact me.
We at ShakaCode are a small, boutique, remote-first application development company. We fund this project by:
Providing priority support and training for anything related to React + Webpack + Rails in our Coaching Program.
Building custom web and mobile (React Native) applications. We typically work with a technical founder or CTO and instantly provide a full development team including designers.
Migrating Angular + Rails to React + Rails. You can see an example of React on Rails and our work converting Angular to React on Rails at egghead.io.
React on Rails is ShakaCode's flagship product. We want to make sure you're aware of it!
Aloha and best wishes from the ShakaCode team!
ShakaCode Community
Slack Room: Contact us for an invite to the ShakaCode Slack room!
From Joel Hooks, Co-Founder, Chief Nerd at egghead.io, January 30, 2017:
bootstrap-loader v3 Docs!
If you want the v1 docs which are compatible with Webpack v1, please see the v1 branch. If you're using v2, be sure to check the peer dependencies of webpack and the extract-text-webpack-plugin. See the v2 docs.
bootstrap-loader
Successor to bootstrap-sass-loader. Load Bootstrap styles and scripts in your Webpack bundle. This loader uses SASS to process CSS styles. Bootstrap 3 & 4 are supported.
Or add bootstrap-loader as a module in an entry point in your webpack config (you'll need Webpack 2.1 beta and higher):
entry: [ 'bootstrap-loader', './app' ]
Config is optional. If used, by default it should be placed in your project's root dir with name .bootstraprc. You can write it in YAML or JSON formats. Take a look at the default config files for Bootstrap 3 and Bootstrap 4. Note, we recommend using a configuration or else you might pick up unwanted upgrades, such as when we make Bootstrap 4 the default. Config options don't fall back on the defaults once a config file is present. Be sure not to delete config options. To start with a custom config, copy over a default config file as a starting point.
If the default location doesn't work for you (e.g. you want to create multiple bootstrap configs for branding variations or you symlink your npm_modules directory), you may pass the absolute path of the .bootstraprc file to the loader in your webpack config, e.g. bootstrap-loader/lib/bootstrap.loader?extractStyles&configFilePath=${__dirname}/.bootstraprc!bootstrap-loader/no-op.js.
Note that :__dirname is a global variable that Node sets for us. It is "the name of the directory that the currently executing script resides in."
YAML Format
---# You can use comments herestyleLoaders:-style-loader-css-loader-sass-loaderstyles:normalize:trueprint:truescripts:alert:truebutton:true
JSON Format
{// And JSON comments also!"styleLoaders":["style-loader","css-loader","sass-loader"],"styles":{"normalize":true,"print":true},"scripts":{"alert":true,"button":true}}
If no config provided, default one for Bootstrap 3 will be used.
ENV Specific Values
The following settings can be set differently
Different settings for different environments can be used.
Example of setting production to extract styles and other envs don't and use the style-loader:
# It depends on value of NODE_ENV environment variableenv:production:extractStyles:truestyleLoaders:-css-loader-postcss-loader-sass-loader# If NODE_ENV specific value not foundextractStyles:falsestyleLoaders:-style-loader-css-loader-postcss-loader-sass-loader
Bootstrap 4 internal dependency solution
Because of Bootstrap 4's removal of UMD, internal dependencies, such as Popover's dependencies on Tooltip and Dropdown's dependency on Utils, are no longer naively resolved by Webpack (See Issue #172. In order to solve this issue, add the following code to your webpack configuration:
Outputs debugging info. Set this option to debug to output debugging information. This is critical for debugging issues. The output will go to your webpack console.
Array of webpack loaders. sass-loader is required, order matters. In most cases the style loader should definitely go first and the sass loader should be last.
Note: Beginning with Webpack v2.1.0-beta.26, the '-loader' suffix is required for all loaders.
To maintain compatibility with older versions, all accepted style loaders (style, css, postcss, sass, resolve-url) are automatically appended with '-loader'.
It is recommended that you explicitly state the '-loader' suffix for every webpack loader in styleLoaders to ensure compatibility in the long term.
styleLoaders:-style-loader-css-loader-sass-loader# You can apply loader params here:-sass-loader?outputStyle=expanded
Different settings for different environments can be used. See above example.
extractStyles
Default: false
Env Specific: true
Extract styles to stand-alone css file using mini-css-extract-plugin version 2.0.0-beta or higher. See mini-css-extract-plugin for more details.
extractStyles:false
Different settings for different environments can be used. See above example.
This param can also be set to true in webpack config:
Customize Bootstrap variables that get imported before the original Bootstrap variables. Thus, derived Bootstrap variables can depend on values from here. See the Bootstrap _variables.scss file for examples of derived Bootstrap variables.
This gets loaded after bootstrap variables is loaded. Thus, you may customize Bootstrap variables based on the values established in the Bootstrap _variables.scss file. Note, if bootstrap did not have derived values, it would not be necessary to have two config files for customizing bootstrap values.
If you want your bootstrap override value to apply to derived variable values, then place your customizations in preBootstrapCustomizations. If you want to be sure your changes don't affect other derived values, place the changes in bootstrapCustomizations.
If you are not sure, you can probably simply use preBootstrapCustomizations and, if you have issues, see _variables.scss for derived values.
Import your custom styles here. Usually this endpoint-file contains list of @imports of your application styles.
appStyles:./path/to/your/app/styles/endpoint.scss
styles
Default: all
Bootstrap styles.
styles:mixins:truenormalize:true...# or enable/disable all of them:styles:true/false
scripts
Default: all
Bootstrap scripts.
scripts:transition:truealert:true...# or enable/disable all of them:scripts:true/false
useCustomIconFontPath
Default: false
If you're using a custom icon font and you need to specify its path ($icon-font-path) in your Sass files, set this option to true.
useCustomIconFontPath:true/false
$icon-font-path: ../fonts // relative to your Sass file
$icon-font-name: 'glyphicons' // you'll typically want to change this too.
Bootstrap 4 only
There is only one additional option for Bootstrap 4:
Tether
Additionally, Bootstrap 4 requires Tether. You can add Tether per the examples in the /examples directory.
Add tether to package.json: npm i --save tether
Add tether as an entry point to your webpack config.
Add this plugin to your webpack config:
plugins: [
new ExtractTextPlugin('app.css', { allChunks: true }),
new webpack.ProvidePlugin({
"window.Tether": "tether"
}),
],
PostCSS
Bootstrap 4 seems to require postcss:
Add postcss and the the postcss-loader: npm i --save postcss postcss-loader
Put postcss before sass in the order of loaders in your .bootstraprc file.
Glyphicon alternatives
Glyphicons have been removed from Bootstrap 4. The examples demonstrate how to use the font-awesome-loader
Additional configurations
Paths to custom assets
If you use bootstrap-loader to load your styles (via preBootstrapCustomizations, bootstrapCustomizations & appStyles) and you load custom assets (fonts, images etc.), then you can use relative paths inside url method (relative to SASS file, from which you load asset).
This was made possible thanks to resolve-url-loader. In common case you don't have to do anything special to apply it — we are doing it internally (just don't forget to install it). But if you want to use its custom settings, please provide it explicitly via styleLoaders option in .bootstraprc:
In entry, set up one bundle per theme. In each bundle include bootstrap-loader with extractStyles and the respective config file.
In plugins, set up the extract-text-webpack-plugin to output each CSS file as [name].css. This will output a CSS file named after each bundle.
jQuery
If you want to use Bootstrap's JS scripts — you have to provide jQuery to Bootstrap JS modules using imports-loader. To avoid having to include jQuery in your project you can disable all scripts (see scripts).
module: {
loaders: [
// Use one of these to serve jQuery for Bootstrap scripts:// Bootstrap 3
{ test:/bootstrap-sass[\/\\]assets[\/\\]javascripts[\/\\]/, loader: 'imports-loader?jQuery=jquery' },
// Bootstrap 4
{ test: /bootstrap[\/\\]dist[\/\\]js[\/\\]umd[\/\\]/, loader: 'imports-loader?jQuery=jquery' },
],
},
Note: if you're not concerned about Windows, the lines look like this (simpler regexp pattern):
// Make variables and mixins available when using CSS modules.
@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_variables";
@import "node_modules/bootstrap-sass/assets/stylesheets/bootstrap/_mixins";
You can then use mixins and variables from Bootstrap in your own code.
Using a custom location for bootstrap module
By default, bootstrap-loader will try to resolve bootstrap from where bootstrap-loader has been installed. In certain situations (e.g. npm linking, using a custom package installer) it may not be resolvable. In this case, you can pass in the location manually.
The ShakaCode team has availability to help your project. If your team might need my help, please email me for a free half-hour project consultation, on anything from React on Rails to any aspect of web or mobile application development for both consumer and enterprise products.
We at ShakaCode are a small, boutique, remote-first application development company. We fund this project by:
Providing priority support and training for anything related to React + Webpack + Rails in our Coaching Program.
Building custom web and mobile (React Native) applications. We typically work with a technical founder or CTO and instantly provide a full development team including designers.
Migrating Angular + Rails to React + Rails. You can see an example of React on Rails and our work converting Angular to React on Rails at egghead.io.
Augmenting your team to get your product completed more efficiently and quickly.
I appreciate your attention and sharing of these offerings with anybody that we can help. Your support allows me to bring you and your team front-end happiness in the Rails world.
Aloha and best wishes from the ShakaCode team!
Supporters
The following companies support our open source projects, and ShakaCode uses their products!
We found that bootstrap-loader demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.It has 0 open source maintainers collaborating on the project.
Package last updated on 18 Oct 2024
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
OpenSSF has published OSPS Baseline, an initiative designed to establish a minimum set of security-related best practices for open source software projects.
Michigan TypeScript founder Dimitri Mitropoulos implements WebAssembly runtime in TypeScript types, enabling Doom to run after processing 177 terabytes of type definitions.