3

I have just got my head into webpack but it has now thrown a fit when i try to include bootstrap-sass from the index.scss file.

This webpack conf works great and outputs a .css file to css/stylehseet.css

'use strict';

var path = require('path');
var ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
    entry: {
        stylesheet: path.resolve(__dirname, 'scss/index.scss')
    },
    output: {
        path: path.resolve(__dirname),
        filename: 'bundle.bootstrap-sass.js'
    },
    module: {
        loaders: [
            {
                test: /\.scss$/,
                loader: ExtractTextPlugin.extract(
                    'style', // backup loader when not building .css file
                    'css!sass' // loaders to preprocess CSS
                )
            }
        ]
    },
    plugins: [
        new ExtractTextPlugin('css/[name].css')
    ],
    resolve: {
        modulesDirectories: [
            './node_modules'
        ]
    }
};

The problem is, in the index.scss I have to include bootstrap-sass. index.scss, which according to the https://www.npmjs.com/package/sass-loader#imports you add a ~ and webpack should then resolve it all:

$icon-font-path: "~bootstrap-sass/assets/fonts/bootstrap/";
@import "~bootstrap-sass/assets/stylesheets/bootstrap";

Problem is in my attempts it isn't :/. I get the output:

Hash: b59b46e5946e7ab3d888
Version: webpack 1.13.3
Time: 1852ms
                   Asset    Size  Chunks             Chunk Names
bundle.bootstrap-sass.js  171 kB       0  [emitted]  css
    + 9 hidden modules

ERROR in ./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot
Module parse failed: /mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type.
SyntaxError: Unexpected character '�' (1:0)
    at Parser.pp$4.raise (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:2221:15)
    at Parser.pp$7.getTokenFromCode (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:2756:10)
    at Parser.pp$7.readToken (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:2477:17)
    at Parser.pp$7.nextToken (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:2468:15)
    at Parser.parse (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:515:10)
    at Object.parse (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/acorn/dist/acorn.js:3098:39)
    at Parser.parse (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/webpack/lib/Parser.js:902:15)
    at DependenciesBlock.<anonymous> (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/webpack/lib/NormalModule.js:104:16)
    at DependenciesBlock.onModuleBuild (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/webpack-core/lib/NormalModuleMixin.js:310:10)
    at nextLoader (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/webpack-core/lib/NormalModuleMixin.js:275:25)
    at /mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/webpack-core/lib/NormalModuleMixin.js:259:5
    at Storage.finished (/mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:38:16)
    at /mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/graceful-fs/graceful-fs.js:78:16
    at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:445:3)
 @ ./~/css-loader!./~/sass-loader!./scss/index.scss 6:4172-4253 6:4276-4357

ERROR in ./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.woff2
..... etc etc

Webpack is fairly powerful but it does take you round the houses to get going... This is my package.json file

{
  "name": "webpack-demo",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "John Carmichael",
  "license": "ISC",
  "dependencies": {
    "bootstrap-sass": "^3.3.6"
  },
  "devDependencies": {
    "css-loader": "^0.25.0",
    "extract-text-webpack-plugin": "latest",
    "node-sass": "^3.11.2",
    "sass-loader": "^4.0.2",
    "style-loader": "^0.13.1",
    "webpack": "^1.13.3"
  }
}

Is there something minor I am missing that anyone can spot :) ?

1 Answers1

2
ERROR in ./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot
Module parse failed: /mnt/4E6E45D36E45B48D/Work/webpack-demo/node_modules/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.eot Unexpected character '�' (1:0)
You may need an appropriate loader to handle this file type.

There's your problem.

The compliler is trying to load an .eot font file, but it doesn't know what to do with it, because you have not used an appropriate loader.

First, installl the file-loader and the url-loader in your dev dependencies, like so: npm install file-loader url-loader -D

Then, add these in your loaders

{
    test: /\.(woff|woff2)(\?v=\d+\.\d+\.\d+)?$/,
    loader: 'url-loader?limit=10000&mimetype=application/font-woff'
},
{
    test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
    loader: 'url-loader?limit=10000&mimetype=application/octet-stream'
},
{
    test: /\.eot(\?v=\d+\.\d+\.\d+)?$/,
    loader: 'file-loader'
},

This way you will be able to load most types of fonts

Dimitris Karagiannis
  • 8,942
  • 8
  • 38
  • 63
  • 1
    Ah ha! thank you! Your answer in combination with http://stackoverflow.com/questions/34639720/webpack-font-include-issue#answer-36635363 helped me get to the bottom of this. Still not 100% sure i get this webpack stuff yet ;) –  Nov 06 '16 at 15:04
  • Also, anyone else reading this.. don't forget to add the url-loader and file-loader to your package json –  Nov 06 '16 at 15:05
  • 1
    @John Oops, you are right, I assumed you had them. Will add in the answer to be complete – Dimitris Karagiannis Nov 06 '16 at 15:15
  • Thanks John, it's work for me as well. The answer of Dimitris Karagiannis passed Unexpected character '�' (1:0), but I got another error is *.ttf Unexpected character '' (1:0) – Huy Nguyen Jan 19 '17 at 02:56
  • @HuyNguyen Can you paste the error lines from "ERROR in..." to "...(1:0)"? – Dimitris Karagiannis Jan 20 '17 at 00:36
  • @Dimitris Karagiannis: Full error message is: ERROR in ./~/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf Module parse failed: /react/node_modules/bootstrap-sass/assets/fonts/bootstrap/glyphicons-halflings-regular.ttf Unexpected character '' (1:0) You may need an appropriate loader to handle this file type. – Huy Nguyen Jan 23 '17 at 04:07