【问题标题】:How can I import fonts from node_modules with webpack and postcss/cssnext如何使用 webpack 和 postcss/cssnext 从 node_modules 导入字体
【发布时间】:2023-03-28 20:40:02
【问题描述】:

我需要使用 font-awesome。
PostCSS 尝试在源目录中查找字体,但不在 node_modules/font-awesome/fonts 中

错误文本:

Error: Can't resolve '../fonts/fontawesome-webfont.eot?v=4.7.0' in 'F:\OpenServer\domains\polymer-postcss\src'

进口:

@import "font-awesome/css/font-awesome.min.css";

webpack.config.js:

var cssPlugin = require('extract-text-webpack-plugin');
module.exports = {
    entry:      {app: './src/app.js'},
    output: {
        path:       './dist',
        filename:   '[name].js',
        publicPath: '/dist/',

    },
    plugins: [new cssPlugin({filename: '[name].css'}),],
    module: {
        rules: [
            {
                test: /\.css$/,
                loader: cssPlugin.extract({
                    use: 'css-loader?importLoaders=1&sourceMap!postcss-loader?sourceMap',
                }),
            },
            {   
                test: /\.(svg|png|gif|jpe?g|woff|woff2|eot|ttf)$/i,
                use: "url-loader?limit=10000&name=[path][name].[ext]?[hash]"
            },
        ],
    },
}

postcss.config.js

module.exports = {
    plugins: {
        'postcss-import': {},
        'postcss-cssnext': {
            browsers: ['last 2 versions', '> 20%'],
        },
    },
};

【问题讨论】:

    标签: fonts webpack node-modules postcss cssnext


    【解决方案1】:

    这个 PostCSS 模块确实解决了我的问题

    https://github.com/devex-web-frontend/postcss-assets-rebase

    【讨论】:

      【解决方案2】:

      您可以使用fa-font-path 更改font-awesome 查找字体的位置。在您的 CSS 中,您可以这样做:

      @fa-font-path: "font-awesome/fonts";
      @import "font-awesome/css/font-awesome.min.css";
      

      虽然我通常只通过设置$fa-font-path 变量在.scss 中看到它。 postcss-import 会抱怨 import 语句需要先出现,但至少它仍然有效。

      您也可以在没有postcss-import 的CSS 中使用@import 语法,css-loader 支持它。唯一的区别是您需要以~ 开始您的路径,以表明它应该被解析为node_module,否则它会被解释为相对路径(如css-loader Readme 所示)。如果没有postcss-import,以下操作不会产生警告:

      @fa-font-path: "font-awesome/fonts";
      @import "~font-awesome/css/font-awesome.min.css";
      

      【讨论】:

      • 不幸的是,这不起作用。我的任务是将 SCSS 更改为 cssnext 并且不再使用 SCSS。标准语法更好))同时我需要继续使用 node_modules 中使用字体、图像等的库。所以,现在我找到了最好的答案,也许你也对它感兴趣:stackoverflow.com/a/43299680/1638298
      猜你喜欢
      • 2016-06-19
      • 2017-07-29
      • 2018-07-14
      • 2017-09-07
      • 2017-09-13
      • 2018-10-28
      • 1970-01-01
      • 1970-01-01
      • 2018-03-05
      相关资源
      最近更新 更多