带有 sass-loader 的 Webpack 文件加载器

Ari*_*Ari 3 sass node.js webpack sass-loader webpack-file-loader

我是 nodejs 的新手,在尝试使用 sass 时遇到问题。

以下信息纯属虚构,但代表实际情况。


场景:

我有以下文件夹结构:

frontend/
 - scss/
  - style.scss
 - main.js
webpack.config.js
Run Code Online (Sandbox Code Playgroud)

目标

我想编译style.scssstyle.css使用的WebPack并把它里面dist/frontend/css/的目录,所以应该得到的这条道路:dist/frontend/css/style.css与创建以下文件夹结构:

dist/
 - frontend/
   - scss/
     - style.scs
   - main.js
frontend/
     - scss/
      - style.scss
     - main.js
webpack.config.js
Run Code Online (Sandbox Code Playgroud)

代码:

主文件

import `style from "./scss/style.scss";`
Run Code Online (Sandbox Code Playgroud)

webpack.config.js

 module.exports = {
     mode: "development",
     entry: {
       main: "./frontend/main.js"
     },
     output: {
      path: path.join(__dirname, "/dist/frontend"),
      publicPath: "/",
      filename: "[name].js"
     },
     module: {
       rules: [ 
        {
           test: /\.(s*)css$/,
           use: [
             {
               loader: "file-loader",
               options: {
                 name: "css/[name].[ext]"
               }
             },
             "style-loader/url",
             "css-loader?-url",
             "sass-loader"
           ] 
         }
       ]
   }
Run Code Online (Sandbox Code Playgroud)

结果:

我收到这条消息:

Module not found: Error: Can't resolve './scss/style.scss' in 'E:\project_name\frontend'


问题

  1. 为什么会这样?

  2. 实现目标的正确代码是什么?

Ari*_*Ari 5

正如消息所说,此路径无效:'./scss/style.scss'。定义路径时有错字。该文件夹应该是sass而不是scss.

以下配置将有助于实现问题中提到的目标

 module: {
   rules: [
      {
    test: /\.(s*)css$/,        
    use: [
      "style-loader/url",
      {
        loader: "file-loader",
        options: {
          name: "css/[name].css"
        }
      },
      "sass-loader"
    ]
  }
 ]
}
Run Code Online (Sandbox Code Playgroud)

它的工作原理类似于Mini CSS Extract Plugin,但在用于将多个文件转换为不同文件时不会.js为每个.css文件生成额外的文件。.scss.css