无法使用Webpack使Bootstrap正常工作

9

我正在使用 webpack-dev-server,并尝试引入 bootstrap。

我的项目结构如下:

── css
│   └── bootstrap.min.css
│── js
|   └── bootstrap.min.js
├── dist
├── index.html
├── package.json
├── server.js
├── src
│   ├── actions.js
│   ├── App.js
│   ├── components
│   ├── constants
│   ├── index.js
│   └── reducers.js
└── webpack.config.js

这是index.html文件:
<!DOCTYPE html>
<html>
  <head>
    <link rel="stylesheet" href="css/bootstrap.min.css">
  </head>
  <body>
    <div id='root'></div>
    <script src="/static/bundle.js"></script>
  </body>    
</html>

每当我运行服务器时,都会遇到以下类型的错误:
Cannot GET /css/bootstrap.min.css

这是webpack.config.js文件:

var path = require('path');
var webpack = require('webpack');

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-dev-server/client?http://localhost:3000',
    'webpack/hot/only-dev-server',
    './src/index'
  ],
  output: {
    path: path.join(__dirname, 'dist'),
    filename: 'bundle.js',
    publicPath: '/static/'
  },
  plugins: [
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ],
  module: {
    loaders: [{
      test: /\.js$/,
      loaders: ['react-hot', 'babel'],
      include: path.join(__dirname, 'src')
    },
    {
      test: /\.css$/,
      loader: 'style!css'
    }]
  },
  resolve: {
    extensions: ['', '.js', '.jsx', '.json']
  }
};

其他都正常,问题只出在Bootstrap上。我尝试了很多不同的配置变化,但无法使其工作。

我还尝试从index.js直接使用JavaScript来引用它:

import '../css/bootstrap.min.css';

我遇到了以下错误:

ERROR in ./~/css-loader!./css/bootstrap.min.css
Module not found: Error: Cannot resolve 'file' or 'directory' ../fonts/glyphicons-halflings-regular.eot in /home/lhahn/dev/javascript/sha/css
 @ ./~/css-loader!./css/bootstrap.min.css 6:3278-3330 6:3348-3400

编辑

从我的理解来看,当尝试导入Bootstrap.min.css时,webpack试图在我的项目中查找字体文件。

4个回答

13

似乎webpack无法加载字体文件。

  1. 通过npm向您的项目添加file-loader,并将其保存为开发依赖项。

npm install file-loader --save-dev
  • 在webpack.config.js中修改模块加载器配置

  • {
      test: /\.(ttf|eot|svg|woff(2)?)(\?[a-z0-9]+)?$/,
      loader: 'file-loader',
    }
    
    尝试通过npm安装bootstrap,同时也记得安装它所依赖的jquery。

    通过npm安装bootstrap,同时别忘了安装它的依赖项jquery。


    我使用 npm install file-loader --save-dev 进行了安装,但错误仍然存在。 - lhahn
    是的,我更新了问题。我还收到了五个这样的错误,说在我的根目录中找不到字体。 - lhahn
    Bootstrap是通过npm安装的吗? - Matteo Basso
    1
    尝试通过npm安装它,还要记得它的依赖项jquery。 - Matteo Basso
    哪一个确切地起作用了?你能在某个地方上传整个代码吗? - papaiatis
    这很有帮助,但会创建一堆垃圾文件。我建议使用以下代码:{ test: [/\.woff?$/, /\.woff2?$/, /\.ttf?$/, /\.eot?$/, /\.svg?$/], loader: 'url-loader' } - Wylliam Judd

    4

    这是我为了让BootstrapWebpack配合使用所做的:

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

    and

    import 'bootstrap/dist/css/bootstrap.css';
    

    此外,如果您在本地使用Bootstrap,您需要在与css文件夹相同的级别上拥有一个fonts文件夹,其中包含Bootstrap字体。最好使用npm来避免所有这些麻烦。

    很遗憾,我现在得到了这个错误:ERROR in ./~/css-loader!./~/bootstrap/dist/css/bootstrap.css Module not found: Error: Cannot resolve module 'url' in /home/lhahn/dev/javascript/sha/node_modules/bootstrap/dist/css @ ./~/css-loader!./~/bootstrap/dist/css/bootstrap.css 6:4622-4676 - lhahn
    1
    当然,因为您需要安装URL加载器 https://www.npmjs.com/package/url-loader - krl
    对于我们这些初学者来说,这些东西应该放在哪里?字体加载行是为webpack.config.js准备的。导入呢? - bbsimonbb

    1
    与@krl的答案相比,这是我在模块rules下放置的内容。https://github.com/AngularClass/angular2-webpack-starter/blob/master/config/webpack.common.js 在运行$ npm install style-loader css-loader url-loader --save-dev之后。
    {test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, use: 'file-loader'},
    {test: /\.(woff|woff2)$/, use: 'url-loader?prefix=font/&limit=5000'},
    {test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=application/octet-stream'},
    {test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, use: 'url-loader?limit=10000&mimetype=image/svg+xml'}
    

    0

    Bootstrap有许多不同的文件/字体/图像需要特定的加载器。检查以下列表中的所有加载器是否存在,如果不存在,则将它们作为devDependencies安装npm,并添加到webpack.config.js中:

    loaders: [
                {
                    test: /\.js$/,
                    exclude: /node_modules/,
                    loader: "babel-loader"
                },
                {
                    test: /\.html$/,
                    loader: "html"
                },
                {
                    test: /\.css$/,
                    loader: "style-loader!css-loader"
                },
                {
                    test: /\.json$/,
                    loader: 'json-loader'
                }, {
                    test: /\.txt$/,
                    loader: 'raw-loader'
                }, {
                    test: /\.(png|jpg|jpeg|gif|svg|woff|woff2)$/,
                    loader: 'url-loader?limit=10000'
                }, {
                    test: /\.(eot|ttf|wav|mp3)$/,
                    loader: 'file-loader'
                }
            ]
    

    在你的主/入口文件,即index.js/app.js中,引入Bootstrap CSS,如下所示:
    import 'bootstrap/dist/css/bootstrap.css'
    

    这个配置仅适用于在ReactJS中使用Bootstrap CSS。


    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接