I am not great at webpack. I have not really 'learned it', I have a template/boilerplate I pull from a repo I made that gives me an environment to build in React. I am struggling to add bootstrap functionality to my projects because I am not great with webpack and understanding how loaders etc. work. Can someone give me a hand? And maybe a simple explanation about webpack loaders? (It is on my list to learn it, but just not a priority).
I get strange errors like:
ERROR in ./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2
Here is my webpack.config.js
var webpack = require('webpack');
var path = require('path');
var BUILD_DIR = path.resolve(__dirname, 'src/client/public');
var APP_DIR = path.resolve(__dirname, 'src/client/app');
var config = {
entry: APP_DIR + '/index.jsx',
output: {
path: BUILD_DIR,
filename: 'bundle.js'
},
module : {
loaders : [
{
test : /\.jsx?/,
include : APP_DIR,
loader : 'babel'
},
{
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}
]
}
};
module.exports = config;
Here is my package.json
{
"name": "react-camper-leaderboard",
"version": "1.0.0",
"description": "freecodecamp leaderboard sorter",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"dev": "webpack -d --watch",
"build": "webpack -p"
},
"author": "Tim Bell",
"license": "ISC",
"dependencies": {
"babel-loader": "^6.2.2",
"babel-preset-es2015": "^6.5.0",
"babel-preset-react": "^6.5.0",
"bootstrap": "^4.0.0-alpha.2",
"bootstrap-loader": "^1.0.8",
"bootstrap-sass": "^3.3.6",
"css-loader": "^0.23.1",
"file-loader": "^0.8.5",
"node-sass": "^3.4.2",
"react": "^0.14.7",
"react-dom": "^0.14.7",
"resolve-url-loader": "^1.4.3",
"sass-loader": "^3.1.2",
"style-loader": "^0.13.0",
"url-loader": "^0.5.7"
},
"devDependencies": {
"css-loader": "^0.23.1",
"node-sass": "^3.4.2",
"sass-loader": "^3.1.2",
"webpack": "^1.12.13"
},
"babel": {
"presets": [
"es2015",
"react"
]
}
}
Checkout the example from the sass-loader. Your
webpack.config.js
should look like this:Since you've added a bunch of loaders, you should make sure that all of them are installed:
Then you should add your
main.scss
either as webpack entry towebpack.config.js
...... or just require/import it in your
main.js
:Since bootstrap needs its
url()
paths configured, you need to set the$icon-font-path
before importing bootstrap. Yourmain.scss
should look like this:And if you think
@import "~bootstrap-sass/assets/stylesheets/bootstrap";
looks ugly, you can also add an alias to yourwebpack.config.js
:Then you just need to write:
It's probably something wrong with
./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2
path. Bootstrap-sass requires it through the sass file but webpack can't find it.Every extension you
import
,require
or load any other way must have its own loader.As of
woff2
you might have added something like:You might want to check the
url-loader
documentation about all the parameters it accepts.You also may match multiple different filename patterns to use with the same loader, eg:
This would load all those extensions.