首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Webpack 3无法正确加载sass和字体

用Webpack 3无法正确加载sass和字体
EN

Stack Overflow用户
提问于 2018-04-12 18:32:14
回答 1查看 1.1K关注 0票数 2

目前,我正在尝试加载我的scss文件和字体-可怕的Webpack3.

这是我的webpack.config.js

代码语言:javascript
复制
const autoprefixer = require('autoprefixer');
const path = require('path');
const webpack = require('webpack');
const precss = require('precss');
const ExtractTextPlugin = require('extract-text-webpack-plugin');

module.exports = {
    entry: [
        './Scripts/app.ts',
        './Scripts/scss/main.scss',
        //'font-awesome/scss/font-awesome.scss',
        'tether'
    ],
    output: {
        filename: 'bundle.js',
        path: path.resolve(__dirname, './Scripts/dist')
    },
    module: {
        rules: [
            {
                loader: 'ts-loader',
                test: /\.ts$/,
                exclude: /node_modules/
            },
            {
                test: /\.css$/,
                use: [
                    'style-loader',
                    'css-loader',
                    'postcss-loader'
                ]
            },
            {
                test: /\.woff2?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
                use: 'url-loader?limit=10000'
            },
            {
                test: /\.(ttf|eot|svg)(\?[\s\S]+)?$/,
                use: 'file-loader'
            },
            {
                test: /\.(jpe?g|png|gif|svg)$/i,
                use: [
                    'file-loader?name=images/[name].[ext]',
                    'image-webpack-loader?bypassOnDebug'
                ]
            },
            // font-awesome
            {
                test: /font-awesome\.config\.js/,
                use: [
                    { loader: 'style-loader' },
                    { loader: 'font-awesome-loader' }
                ]
            },
            // Bootstrap 4
            {
                test: /bootstrap\/dist\/js\/umd\//,
                use: 'imports-loader?jQuery=jquery'
            },
            // SCSS pre-processing
            {
                test: /\.(scss)$/,
                //use: ExtractTextPlugin.extract({
                //    fallback: 'style-loader',
                //    use: [
                //        // the order of the loaders cannot be changed
                //        {
                //            loader: 'css-loader',
                //            options: { minimize: false } // minifize css file
                //        }, // translates CSS into CommonJS modules
                //        {
                //            loader: 'postcss-loader', // Run post css actions
                //            options: {
                //                // post css plugins, can be exported to postcss.config.js
                //                plugins() {
                //                    return [precss, autoprefixer];
                //                }
                //            }
                //        },
                //        { loader: 'sass-loader' } // compiles SASS to CSS
                //    ]
                //})

                use: [{
                    loader: 'style-loader' // creates style nodes from JS strings
                }, {
                    loader: 'css-loader' // translates CSS into CommonJS
                }, {
                    loader: 'sass-loader' // compiles Sass to CSS
                }]
            }
        ]
    },
    resolve: {
        extensions: ['.ts', '.js']
    },
    plugins: [
        new ExtractTextPlugin('main.css', {
            allChunks: true
        }),
        // minify the bundled js files
        new webpack.optimize.UglifyJsPlugin({
            include: /\.js$/,
            minimize: true,
            sourceMap: true
        }),
        new webpack.ProvidePlugin({
            jQuery: 'jquery',
            jquery: 'jquery',
            $: 'jquery',
            tether: 'tether',
            Tether: 'tether',
            Popper: ['popper.js', 'default'],
            Alert: 'exports-loader?Alert!bootstrap/js/dist/alert',
            Button: 'exports-loader?Button!bootstrap/js/dist/button',
            Carousel: 'exports-loader?Carousel!bootstrap/js/dist/carousel',
            Collapse: 'exports-loader?Collapse!bootstrap/js/dist/collapse',
            Dropdown: 'exports-loader?Dropdown!bootstrap/js/dist/dropdown',
            Modal: 'exports-loader?Modal!bootstrap/js/dist/modal',
            Popover: 'exports-loader?Popover!bootstrap/js/dist/popover',
            Scrollspy: 'exports-loader?Scrollspy!bootstrap/js/dist/scrollspy',
            Tab: 'exports-loader?Tab!bootstrap/js/dist/tab',
            Tooltip: "exports-loader?Tooltip!bootstrap/js/dist/tooltip",
            Util: 'exports-loader?Util!bootstrap/js/dist/util'
        })
    ],
    devtool: 'source-map'
};

更多细节(基于.scss的规则):

  1. 我在我的main.scss中导入了字体-可怕的scss,使用:

$fa-字体-路径:“~/节点_模块/字体-可怕/字体”;@import‘~字体-可怕/scss/字体-awesome.scss’;

  1. 字体和图标引用"node_moduldes“中的包(这不是我在生产中想要的)
  2. 构建工件将仅仅是bundle.js

如果我管理webpack,一切似乎都正常。然而,一旦我们转移到生产,我假设图标/字体链接到node_module将被打破。

这是我的scss:

如果我使用(注释掉了的代码),字体-可怕的代码可以正确加载,但我的scss文件却不能加载。

详情:

  • 所有svg/ttf/eot文件都可以生成
  • scss可以被处理为css文件,但是当我加载页面时,它们看起来很可怕。

我的问题是:

有没有方法我可以加载字体-令人敬畏的所有工件和加载我的scss组件正确(如生产)与Webpack 3?

提前谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-13 23:30:26

我花了一些时间努力寻找一个更好的解决方案。以下是我的方法,如预期的那样起作用:

我指的是两个资源:

  1. Using FontAwesome with Sass
  2. sass:https://github.com/webpack-contrib/sass-loader

我想强调的几件事:

  • 我们如何“进口”包装。我将导入css文件从我的TypeScript文件移到main.scss。一切都很有魅力。
  • 另一件重要的事情是sass加载程序有@import的规则。

webpack提供了一种解析文件的高级机制。sass-加载程序使用节点-sass的自定义导入器功能将所有查询传递给webpack解析引擎。因此,您可以从node_modules导入Sass模块。先告诉webpack这不是一个相对重要的东西: @import“~自助/dist/css/引导”; 重要的是只在前面加上~,因为~/解析到主目录。webpack需要区分引导和~引导,因为CSS和Sass文件没有用于导入相关文件的特殊语法。写入@import "file“与”import“./file相同;

来自https://github.com/webpack-contrib/sass-loader

下面是我的main.scss文件:

代码语言:javascript
复制
@import '~bootstrap/dist/css/bootstrap.min.css';
@import '~inputmask/css/inputmask.css';

$fa-font-path: "~font-awesome/fonts";
@import '~font-awesome/scss/font-awesome.scss';

// import partials
@import "variables";
@import "mixins";

@import "accordion";
@import "buttons";
@import "cards";
@import "container";
@import "errors";
@import "fonts";
@import "form";
@import "headers";
@import "hyperlinks";
@import "tables";
@import "warnings";
@import "wcb-footer";
@import "wcb-header";

@import "asmt-report"; // optional
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49803670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档