如何在Webpack插件中指定多个加载器?

时间:2017-01-18 00:01:52

标签: css sass webpack extract-text-plugin

我的Webpack配置包含以下加载器。

module: {
  loaders: [
    { test: /\.js$/, loader: "babel", exclude: /node_modules/ },
    { test: /\.sass$/, loaders: ["style-loader", "css-loader", "sass-loader"], exclude: /node_modules/ }
  ]
},

然后,我希望将CSS拉出到一个单独的文件中,我尝试使用extract text webpack plugin,像这样交替我的配置。

var ExtractTextPlugin = require("extract-text-webpack-plugin");

module: {
  loaders: [
    { test: /\.js$/, loader: "babel", exclude: /node_modules/ },
    // { test: /\.sass$/, loaders: ["style-loader", "css-loader", "sass-loader"], exclude: /node_modules/ }
    {
      test: /\.sass$/,
      loader: ExtractTextPlugin.extract(
        {
          loaders: ["css-loader", "sass-loader"],
          fallbackLoader: "style-loader"
        }
      ),
      exclude: /node_modules/
    }
  ]
},
plugins: [new ExtractTextPlugin("global.css")],...

然而,它失败了。可能是因为我没有正确指定装载机。如何指定多个加载器(一个用于SASS,一个用于CSS)?

  

找不到模块:错误:无法解析模块' [object Object]'在C:\ Source \ Poc \ TestProj中    @ ./index.js 7:14-38

我已经检查了文件 index.js 但我在那里看不到任何错误。它的字面意思是空出口,如下所示。 7:14-38的提法对我没有任何意义。文件中没有那么多行,甚至......

import CssGlobal from "./global.sass";
//document.write("Banana!");
export default {}

2 个答案:

答案 0 :(得分:0)

ExtractTextPlugin.extract()的这种语法仅适用于webpack2及更高版本,显然(作为参数的对象)。请检查此issue

为了使其与webpack1一起使用,语法为:

  
    

ExtractTextPlugin.extract([notExtractLoader],loader,[options])`

  
     

notExtractLoader (可选)在未提取css时应使用的加载程序(即在allChunks中的另一个块中:   假)

     

loader 应该用于将资源转换为css导出模块的加载程序。

来源:https://github.com/webpack/extract-text-webpack-plugin/blob/webpack-1/README.md

因此,一个有效的配置文件是:

var ExtractTextPlugin = require("extract-text-webpack-plugin");

module.exports = {
    /* ... */
    module : {
          loaders: [
            { test: /\.js$/, loader: "babel", exclude: /node_modules/ },
            { 
                test: /\.sass$/, 
                exclude: /node_modules/,
                loader: ExtractTextPlugin.extract("style-loader", "css-loader!sass-loader")
               /* using ExtractTextPlugin.extract(["css","sass"]) works too */

            }
          ]
    },
    plugins: [
        new ExtractTextPlugin("styles.css")
    ]   
}

这将生成一个styles.css文件。

答案 1 :(得分:0)

加载程序是应用于应用程序资源文件的转换。它们是函数(在node.js中运行),它将资源文件的源作为参数并返回新的源。

例如,您可以使用加载器告诉webpack加载CoffeeScript或JSX。

很好地解释了这里 http://ui-codeman.blogspot.in/2017/02/webpack.html?view=sidebar