使用Webpack和Bootstrap的错误

时间:2017-06-16 16:27:11

标签: css twitter-bootstrap webpack webpack-2 webpack-style-loader

我几天都在反对这个问题,所以如果这是一个简单的解决方案,我会道歉。我是Webpack的新手。

我希望将Bootstrap导入到我的项目中,而不是使用CDN或任何其他方法。但我发生了两个问题:

  1. Bootstrap未在页面上呈现
  2. 我一直在尝试加载.woff和.woff2 glyphicons
  3. 我将在下方提供我的代码,这将告诉您我在哪里。感谢您的帮助!

    文件树(为清晰起见,左侧文件):

    -node_modules
    -src
    --index.html
    --app
    ---vendor.jsx
    --build
    ---app.js
    ---vendor.js
    -webpack.config.js
    

    的index.html

    <body>
        <!-- Insert other Body code here -->
    
        <!-- Webpack Bundle -->
        <script src="build/vendor.js"></script>
        <script src="build/app.js"></script>
    </body>
    

    vendor.jsx

    // JS dependencies
    const $ = require('jquery');
    const bootstrap = require('bootstrap');
    import React from 'react';
    import ReactDOM from 'react-dom';
    
    // CSS files
    import 'bootstrap/dist/css/bootstrap.css';
    import 'bootstrap/dist/css/bootstrap-theme.css';
    

    webpack.config.js

    var webpack = require('webpack');
    var path = require('path');
    
    var BUILD_DIR = path.resolve(__dirname, './src/build');
    var APP_DIR = path.resolve(__dirname, './src/app');
    
    var config = {
        entry: {
            app: APP_DIR + '/app.jsx',
            vendor: APP_DIR + '/vendor.jsx'
        },
        output: {
            path: BUILD_DIR,
            filename: '[name].js'
        },
        module: {
            rules: [
                {
                    test: /\.jsx?/,
                    include: APP_DIR,
                    loader: 'babel-loader',
                    exclude: /node_modules/,
                    query: {
                        presets: ['es2015', 'react']
                    }
                },
                {
                    test: /\.css$/,
                    use: ['style-loader', 'css-loader']
                },
                {
                    test: /\.png$/,
                    use: 'url-loader?limit=100000'
                },
                {
                    test: /\.jpg$/,
                    use: 'file-loader'
                },
                {
                    test: /\.(woff|woff2) (\?v=\d+\.\d+\.\d+)?$/,
                    use: 'url-loader?limit=10000&mimetype=application/font-woff'
                },
                {
                    test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
                    use: 'url-loader?limit=10000&mimetype=application/octet-stream'
                },
                {
                    test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, 
                    use: 'file-loader'
                },
                {
                    test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, 
                    use: 'url-loader?limit=10000&mimetype=image/svg+xml'
                }
            ]
        }
    };
    
    module.exports = config;
    

    修改

    @InfiniteStack要求提供错误日志,因此它们包含在下面:

    Chrome调试错误:

      

    未捕获错误:模块解析失败:   C:\用户\ {用户} \代码\ REF-数据映射器\ node_modules \自举\ DIST \字体\ glyphicons-半身-regular.woff2   意外的字符'

    Webpack错误:

      错误在./~/bootstrap/dist/fonts/glyphicons-halflings-regular.woff   模块解析失败:   C:\用户\ {用户} \代码\ REF-数据映射器\ node_modules \自举\ DIST \字体\ glyphicons-半身-边条   r.woff意外的角色''(1:4)你可能需要一个合适的角色   加载器来处理这种文件类型。 (此二进制文件省略了源代码   文件)@ ./~/css-loader!./~/bootstrap/dist/css/bootstrap.css   6:4707-4760 @ ./~/bootstrap/dist/css/bootstrap.css @   ./src/app/vendor.jsx

         错误在./~/bootstrap/dist/fonts/glyphicons-halflings-regular.woff2   模块解析失败:   C:\用户\ {用户} \代码\ REF-数据映射器\ node_modules \自举\ DIST \字体\ glyphicons-半身-边条   r.woff2意外的字符''(1:4)你可能需要一个合适的字符   加载器来处理这种文件类型。 (此二进制文件省略了源代码   文件)@ ./~/css-loader!./~/bootstrap/dist/css/bootstrap.css   6:4622-4676 @ ./~/bootstrap/dist/css/bootstrap.css @   ./src/app/vendor.jsx

1 个答案:

答案 0 :(得分:2)

感谢@InfiniteStack和webpack / webpack的Gitter工作人员,我现在有了完整的答案。

在webpack.config.js中,在进一步修改之前,必须使用 url-loader?limit100000 引用url-loader。

同样,jQuery需要被定义为底部附近的webpack中的插件。所有更改都需要在webpack.config.js中进行。我完成的文件如下:

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

var BUILD_DIR = path.resolve(__dirname, './src/build');
var APP_DIR = path.resolve(__dirname, './src/app');

var config = {
    entry: {
        app: APP_DIR + '/app.jsx',
        vendor: APP_DIR + '/vendor.jsx'
    },
    output: {
        path: BUILD_DIR,
        filename: '[name].js'
    },
    module: {
        rules: [
            {
                test: /\.jsx?/,
                include: APP_DIR,
                loader: 'babel-loader',
                exclude: /node_modules/,
                query: {
                    presets: ['es2015', 'react']
                }
            },
            {
                test: /\.css$/,
                use: ['style-loader', 'css-loader']
            },
            {
                test: /\.(png|woff|woff2|eot|ttf|svg)$/,
                use: 'url-loader?limit=100000'
            },
            {
                test: /\.png$/,
                use: 'url-loader?limit=100000'
            },
            {
                test: /\.jpg$/,
                use: 'file-loader'
            },
            {
                test: /\.(woff|woff2) (\?v=\d+\.\d+\.\d+)?$/,
                use: 'url-loader?limit=10000&mimetype=application/font-woff'
            },
            {
                test: /\.ttf(\?v=\d+\.\d+\.\d+)?$/,
                use: 'url-loader?limit=10000&mimetype=application/octet-stream'
            },
            {
                test: /\.eot(\?v=\d+\.\d+\.\d+)?$/, 
                use: 'file-loader'
            },
            {
                test: /\.svg(\?v=\d+\.\d+\.\d+)?$/, 
                use: 'url-loader?limit=10000&mimetype=image/svg+xml'
            }
        ]
    },
    plugins: [
        new webpack.ProvidePlugin({
            jQuery: 'jquery',
            $: 'jquery',
            jquery: 'jquery'
        })
    ]
};

module.exports = config;

所以TL; DR: 将jQuery定义为插件 在添加额外内容之前使用url-loader定义所有非js资产

如果其他人对于为什么会这样做有更多的答案,如果你想PM /给我留言,我会对此持开放态度。

再次感谢你!