【问题标题】:Webpack2 loading and extracting LESS fileWebpack2加载和提取LESS文件
【发布时间】:2017-02-01 16:20:21
【问题描述】:

我正在尝试设置 Webpack2 来处理我的 LESS 文件并从中创建一个单独的 CSS。但是,我不断收到错误消息。我无法找到概述该过程的 Webpack2 示例,因此不确定我缺少什么。

我的 Webpack 配置:

module.exports = {
  entry: {
    'public': [
      './src/client/styles/public.js'
    ]
  },
  output: {
   ...
  },
  module: {
      {
       test: /.*\.less$/,
        loader: ExtractTextPlugin.extract({ loader: 'less-loader', fallbackLoader: 'style-loader' })
      }
    ]

  },
  plugins: [
    new ExtractTextPlugin({ filename: '[name].css', disable: false, allChunks: true })
  ]
}

public.js 文件(我也尝试将 less 文件直接传递给 entry,结果相同):

require('style.less')

style.less 文件

a { color: red; }

错误:

ERROR in ./~/less-loader!./src/client/styles/style.less
Module parse failed: /node_modules/less-loader/index.js!/src/client/styles/style.less Unexpected token (1:2)
You may need an appropriate loader to handle this file type.
| a {
|   color: red;
| }

从消息中可以看出,less 加载器正在正确地传递文件但中断。我尝试了一个空白文件,但后来我得到:

TypeError: text.forEach is not a function

版本:

"extract-text-webpack-plugin": "^2.0.0-beta.4",
"less": "^2.7.1",
"less-loader": "^2.2.3",
"style-loader": "^0.13.1",
"webpack": "^2.1.0-beta.25",
"webpack-dev-server": "^2.1.0-beta.5",
"yargs": "~3.5.4"

可能是什么问题?

【问题讨论】:

    标签: webpack webpack-style-loader


    【解决方案1】:

    好的.. 得到它的工作:

     loader: ExtractTextPlugin.extract({ 
         loader:[ 'css', 'less' ], 
         fallbackLoader: 'style-loader' 
     })
    

    编辑这是针对 Webpack v2 - 感谢 @thelastshadow 对 Webpack 4 问题 here 的注释。

    【讨论】:

    • 所以...通过使用额外的加载器。
    • @Quotidian 是的。让我失望的是 webpack2 配置。您可以将其发布在您的答案中,我会标记它。
    • Webpack 是一个文件捆绑器/加载器,因此必须提取使用单独插件收集的内容可能会令人困惑。
    • 我将提出使用 extractTextPlugin 时不需要 fall backloader 的论点
    • 请注意,ExtractTextPlugin 不适用于 webpack 4+ github.com/webpack-contrib/extract-text-webpack-plugin/issues/…
    【解决方案2】:

    您可能还需要使用额外的负载,例如样式加载器或 css-loaders。来自Docs

    var css = require("!raw!less!./file.less");
    // => returns compiled css code from file.less, resolves imports
    var css = require("!css!less!./file.less");
    // => returns compiled css code from file.less, resolves imports and url(...)s
    

    less-loader 只处理 CSS 的处理。然后,Webpack 需要知道如何在将 CSS 提取出来之前将其合并。

    【讨论】:

    • fallbackLoader 不就是这样做的吗?
    • 我以前从未见过fallbackLoader 选项,所以我不确定。我怀疑不是;只有在真正的加载器无法处理/找不到时才会使用后备。类似于 resolve.fallback 的工作原理。
    • 那么样式加载器是“后备”吗?
    猜你喜欢
    • 2017-06-06
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 2017-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多