【问题标题】:Webpack 4 with Less and MiniCssExtractPlugin using entries带有 Less 和 MiniCssExtractPlugin 的 Webpack 4 使用条目
【发布时间】:2019-01-11 06:37:55
【问题描述】:

我的应用程序中的样式有以下结构:

应用程序

- css/
   - bootstrap/
      - boostrap.less -> has (@import "another.less")
      - another.less
   - common/
      - common.less
   - entries/
      - bootstrap.js -> has (import style from "../bootstrap/bootstrap.less")
      - common.js -> has (import common from "../common/common.less")

现在我需要从导入到条目 bootstrap.js 和 common.js 的样式中创建单独的 CSS-es。

webpack.config.js

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
{
    entry: {
        "boostrap": ["./css/entries/boostrap.js"]
    },
    module: {
        rules: [
            {
                test: /\.(less)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    "css-loader",
                    "less-loader"
                ]
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: "./css/[name].css"
        })
    ]
}

package.json

{
    "webpack": "^4.16.3",
    "webpack-cli": "^3.1.0",
    "css-loader": "^1.0.0",
    "less-loader": "^4.1.0",
    "mini-css-extract-plugin": "^0.4.1",
}

当我运行 webpack 时出现以下错误:

Entrypoint boostrap = boostrap.js
    [0] multi ./css/entries/boostrap.js 28 bytes {0} [built]
    [1] ./css/entries/boostrap.js 48 bytes {0} [built]
    [2] ./css/bootstrap/bootstrap.less 1.41 KiB {0} [built] [failed] [1 error]

    ERROR in ./css/bootstrap/bootstrap.less
    Module build failed (from ./node_modules/mini-css-extract-plugin/dist/loader.js):
    ModuleParseError: Module parse failed: Unexpected character ' ' (1:0)
    You may need an appropriate loader to handle this file type.

你知道出了什么问题吗?看起来bootstrap.less 在导入其他较少文件时抛出了错误,但我不知道为什么。

谢谢

拉法尔

PS:here 报告了类似问题。

【问题讨论】:

  • 如果你只做import "../bootstrap/bootstrap.less",它会坏吗?
  • 谢谢,但不幸的是我遇到了同样的错误......

标签: webpack less webpack-style-loader webpack-4 mini-css-extract-plugin


【解决方案1】:

我找到了原因。原来我的boostrap.less 引用了glyphicons.less。 Glyphicons 为扩展导入字体:*.eot、*.woff2、*.woff、*.ttf 和 *.svg,这是我缺少的部分。

file-loaderurl-loader 是两个可能的选项。我选择了后者:

npm install url-loader --save-dev

并添加如下配置:

const MiniCssExtractPlugin = require("mini-css-extract-plugin");
{
    entry: {
        "boostrap": ["./css/entries/boostrap.js"]
    },
    module: {
        rules: [
            {
                test: /\.(less)$/,
                use: [
                    MiniCssExtractPlugin.loader,
                    "css-loader",
                    "less-loader"
                ]
            },
            {
                test: /\.woff($|\?)|\.woff2($|\?)|\.ttf($|\?)|\.eot($|\?)|\.svg($|\?)/,
                use: "url-loader"
            }
        ]
    },
    plugins: [
        new MiniCssExtractPlugin({
            filename: "./css/[name].css"
        })
    ]
}

谢谢

拉法尔

【讨论】:

  • 谢谢,这对我有用!为 url-loader 添加测试和使用是我必须在配置文件中更改的所有内容。我改用正则表达式:test: /\.(woff|woff2|ttf|eot|svg)($|\?)/,
猜你喜欢
  • 2023-03-12
  • 2019-07-09
  • 2019-06-08
  • 1970-01-01
  • 2018-05-30
  • 1970-01-01
  • 1970-01-01
  • 2018-12-20
  • 1970-01-01
相关资源
最近更新 更多