webpack sass-loader没有生成css文件

PAT*_*ION 37 sass loader webpack

我无法弄清楚如何使用webpack sass-loader渲染css文件.

这是我的webpackconfig.js的样子:

module.exports = {
  context: __dirname + "/app",
  entry: {
    javascript: "./app.js",
    html: "./index.html"
  },


  output: {
    filename: "app.js",
    path: __dirname + "/dist"
  },


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

      //Index HMTML
      {
        test: /\.html$/,
        loader: "file?name=[name].[ext]",
      },
      //Hotloader
      {
        test: /\.js$/,
        exclude: /node_modules/,
        loaders: ["react-hot", "babel-loader"],
      },

      // SASS
      {
        test: /\.scss$/,
        loader: 'style!css!sass'
      }

    ],
  }

}
Run Code Online (Sandbox Code Playgroud)

如您所见,我正在使用文档中指定的sass-loader模块加载器.

  {
    test: /\.scss$/,
    loader: 'style!css!sass'
  }
Run Code Online (Sandbox Code Playgroud)

我的根看起来像这样:

Project Root:
  app:
    style.scss
  dist:
   ?????? WTF is my css file??
  webpack.config.js
Run Code Online (Sandbox Code Playgroud)

我可以得到其他一切工作,如html和jsx babble加载器.我只需在命令行中键入webpack即可.

我在使用sass loader做错了.它是什么?请帮忙.

Amb*_*oos 57

您正在使用样式加载器,默认情况下,它将您的CSS嵌入到Javascript中并在运行时注入它.

如果你想要真正的CSS文件而不是你的Javascript中嵌入的CSS,你应该使用ExtractTextPlugin.

基本配置是:

  1. 添加var ExtractTextPlugin = require('extract-text-webpack-plugin');到Webpack配置文件的顶部.

  2. 将以下内容添加到Webpack配置中:

    plugins: [
        new ExtractTextPlugin('[name].css'),
    ]
    
    Run Code Online (Sandbox Code Playgroud)
  3. 将您的SASS加载程序配置更改为以下内容:

    {
        test: /\.scss$/,
        loader: ExtractTextPlugin.extract(
            'style-loader', // backup loader when not building .css file
            'css-loader!sass-loader' // loaders to preprocess CSS
        )
    }
    
    Run Code Online (Sandbox Code Playgroud)

这样做是将它可以在您的包中找到的所有CSS提取到一个单独的文件中.该名称将基于您的入口点名称,在您的情况下将导致javascript.css(从您的配置的输入部分).

ExtractTextPlugin.extract-loader所使用的插件来找到代码中的CSS并把它放在单独的文件.例如,您提供的第一个参数是它在遇到异步模块中的文件时应该回退到的加载器.通常,这几乎总是如此style-loader.第二个参数告诉什么装载机用来处理CSS插件,在这种情况下css-loadersass-loader,但事情好像postcss-loader经常使用了.

有关使用Webpack构建CSS的更多信息,请访问:https://webpack.github.io/docs/stylesheets.html#separate-css-bundle

  • 以上是一种有效的方法,但是我添加了一个我不知道的注释,即使我使用了上述方法:*webpack不会选择你的样式,直到你添加*`require("./ stylesheet.css") `到你的模块(JS文件).这可能是显而易见的(并在文档中提到),但对于Webpack初学者来说并非如此. (9认同)
  • 你保存了我的大部分头发:) (6认同)
  • @piotr.d 很有趣,当我尝试这样做时,我收到错误:`./scripts/app.js 中的错误``找不到模块:错误:无法解析“文件”或“目录”./app.css ...` (2认同)
  • 提取 extract-text-webpack-plugin 现在要求您显式给出加载器的名称。IE。`提取(css-loader | sass-loader)` (2认同)