首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Webpack - postcss-url和文件加载器

Webpack - postcss-url和文件加载器
EN

Stack Overflow用户
提问于 2020-02-02 22:26:04
回答 1查看 1.5K关注 0票数 1

我正在为自己建立一个简单的webpack配置,以处理SCSS,ES6+,图片/字体复制等。用于在Shopify上开发主题。在尝试处理字体/图像时,我遇到了一个障碍。file-loader可以很好地处理它们,但对于Shopify,当CSS中有url()函数时,路径必须类似于{{- 'file-name.ext' | asset_url -}}。CSS包本身必须类似于bundle.css.liquid。这很好,就像复制资产一样,一切都像预期的那样工作。以下是webpack配置:

代码语言:javascript
复制
const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const sass = require('sass');

module.exports = {
  entry: './src/js/index.js',
  output: {
    path: path.resolve(__dirname, '../shopify/assets/'),
    filename: 'bundle.js'
  },
  module: {
    rules: [
      {
        test: /\.js$/,
        exclude: /(node_modules)/,
        use: {
          loader: 'babel-loader',
          options: {
            presets: [
              [
                '@babel/preset-env',
                {
                  targets: {
                    browsers: ['last 3 version']
                  }
                }
              ]
            ]
          }
        }
      },
      {
        test: /\.(sa|sc|c)ss$/,
        use: [
          {
            loader: MiniCssExtractPlugin.loader
          },
          {
            loader: 'css-loader'
          },
          {
            loader: 'postcss-loader',
            options: {
              config: {
                path: './config'
              }
            }
          },
          {
            loader: 'sass-loader',
            options: {
              implementation: sass
            }
          }
        ]
      },
      {
        test: /\.(png|jpe?g|gif|svg|woff2?|ttf|otf|eot)$/i,
        use: [
          {
            loader: 'file-loader',
            options: {
              name: '[name].[ext]'
            }
          }
        ]
      }
    ]
  },
  plugins: [
    new MiniCssExtractPlugin({
      filename: 'bundle.css.liquid'
    })
  ],
  mode: 'production',
  watch: true
};

现在,当我尝试为url()做一些工作时,它也可以按预期工作,但现在它不会复制所需文件夹中的文件。它按照预期编译了bundle.jsbundle.css.liquid,但这次没有复制任何资产。我需要url()中请求的资产和编译包中的url更改。这里是postcss配置:

代码语言:javascript
复制
const fs = require('fs');
const postcss = require('postcss');
const autoprefixer = require('autoprefixer');
const cssnano = require('cssnano');
const postcssurl = require('postcss-url');
const chalk = require('chalk');

const urlOptions = {
  url: (asset, dir) => {
    const file = asset.url.split('/')[2];
    const processedUrl = `{{- ${file} | asset_url -}}`;

    return processedUrl;
  }
};

module.exports = {
  plugins: [autoprefixer, cssnano, postcssurl(urlOptions)]
};

感谢您的建议。提前谢谢你!

EN

回答 1

Stack Overflow用户

发布于 2020-02-03 00:09:02

您的test有点奇怪

您可以查看完整的示例here

代码语言:javascript
复制
       {
                test: /\.(css|scss|sass)$/,
                use: [
                    { loader: 'style-loader' },
                    { loader: 'css-loader' },
                    {
                        loader: 'postcss-loader',
                        options: {
                            ident: "postcss",
                            plugins: () => [
                                require("postcss-flexbugs-fixes"),
                                require("postcss-preset-env")({
                                    autoprefixer: {
                                        flexbox: "no-2009",
                                    },
                                    stage: 3,
                                }),

                                postcssNormalize(),
                            ],
                            sourceMap: true,
                        }
                    },
                    { loader: 'sass-loader' },
                ]
            }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60027041

复制
相关文章

相似问题

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