Webpack + SASS + Autoprefixer 不生成 CSS 文件

Posted

技术标签:

【中文标题】Webpack + SASS + Autoprefixer 不生成 CSS 文件【英文标题】:Webpack + SASS + Autoprefixer are not generating the CSS file 【发布时间】:2019-12-08 01:04:31 【问题描述】:

我想用 webpack 将我的 SCSS 文件编译成 main.min.css。我正在使用 autoprefixer 并且没有生成最终文件。我尝试了很多选择,但现在我被卡住了。可能是什么?

基本上,我在 root/src/styles/...scss 上进行开发,我需要在 root/css 中转译并创建一个名为 main.min.css 的缩小文件。

我的 package.json:


  "name": "rms",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": 
    "build": "webpack",
    "start": "webpack-dev-server --output-public-path=/js/new-theme/"
  ,
  "keywords": [],
  "author": "Rafael Perozin",
  "license": "MIT",
  "devDependencies": 
    "@babel/core": "^7.5.5",
    "@babel/plugin-transform-runtime": "^7.5.5",
    "@babel/preset-env": "^7.5.5",
    "@material/tab-bar": "^3.1.0",
    "@material/tab-scroller": "^3.1.0",
    "autoprefixer": "^9.6.1",
    "babel-loader": "^8.0.6",
    "core-js": "^3.1.4",
    "css-loader": "^3.1.0",
    "mini-css-extract-plugin": "^0.8.0",
    "node-sass": "^4.12.0",
    "postcss-cli": "^6.1.3",
    "postcss-loader": "^3.0.0",
    "postcss-preset-env": "^6.7.0",
    "sass-loader": "^7.1.0",
    "webpack": "^4.38.0",
    "webpack-cli": "^3.3.6",
    "webpack-dev-server": "^3.7.2"
  ,
  "dependencies": 
    "@babel/runtime": "^7.5.5"
  ,
  "browserslist": [
    "last 2 versions",
    "ie >= 8",
    "edge >= 15",
    "ie_mob >= 10",
    "ff >= 45",
    "chrome >= 45",
    "safari >= 5",
    "opera >= 23",
    "ios >= 7",
    "android >= 4",
    "bb >= 10"
  ]

我的 webpack.config.js

const path = require('path');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');

module.exports = 
    plugins: [
        new MiniCssExtractPlugin(
            filename: 'main.min.css'
        ),
    ],
    entry: 
        script: './src/scripts/main.js',
        style: './src/styles/main.scss'
    ,
    output: 
        path: path.resolve(__dirname, './js/new-theme'),
        filename: 'main.min.js',
        publicPath: './js/new-theme'
    ,
    module: 
        rules: [
            
                test: /\.js?$/,
                exclude: /node_modules/,
                use: 
                    loader: 'babel-loader',
                    options: 
                        "presets": [
                            [
                                '@babel/preset-env',
                                    
                                        "targets": 
                                            "browsers": [
                                                "last 2 versions",
                                                "chrome >= 71",
                                                "ie >= 11",
                                                "ios >= 8",
                                                "android >= 5",
                                                "safari >= 10",
                                                "firefox >= 61"
                                            ]
                                        ,
                                        "useBuiltIns": "usage",
                                        "corejs": 3
                                    
                                ]
                        ],
                        "plugins": [
                            ["@babel/transform-runtime"]
                        ]
                    
                
            ,
            
                test: /\.(sa|sc|c)ss$/,
                use: [
                    
                        loader: MiniCssExtractPlugin.loader,
                        options: 
                            path: path.resolve(__dirname, './css/new-theme'),
                            publicPath: './css/new-theme'
                        
                    ,
                    
                        loader: "css-loader",
                        options: 
                            import: true,
                        
                    ,
                    
                        loader: "postcss-loader",
                        options: 
                            ident: 'postcss',
                            plugins: [
                                require('autoprefixer')
                            ]
                        
                    ,
                    
                        loader: "sass-loader",
                        options: 
                    
                ]
            
        ]
    

当运行npm run build 时没有显示错误,只是警告模式。

查看当前错误图片:

【问题讨论】:

但是要使自动前缀器工作,必须先安装它,我在 package.json 中看不到它:) 我不记得我在哪里读过,但 postcss-preset-env 应该已经有 autoprefixer,我只需要使用插件 require 和 ident。不是吗? @GrzegorzT。我在那里添加但仍然无法正常工作。 【参考方案1】:

webpack.config.js - 听到指向示例的链接可能很有用ToDoList

js


  test: /\.js$/,
  exclude: /node_modules/,
  use: 
    loader: 'babel-loader',
  ,
,

css/sass

 
    // CSS SASS SCSS
    test: /\.(css|sass|scss)$/,
    use: [
      argv.mode === 'development'
        ? 'style-loader'
        : MiniCssExtractPlugin.loader,
      
        loader: 'css-loader',
        options: 
          importLoaders: 2,
          sourceMap: true,
        ,
      ,
      
        loader: 'postcss-loader'
      ,
      
        loader: 'sass-loader',
        options: 
          sourceMap: true,
        ,
      ,
    ],
 ,

将文件添加到根文件夹postcss.config.js

module.exports = 
  plugins: 
   autoprefixer: ,
 ,
;

package.json 添加

"browserslist": [
  "> 1%",
  "last 1 version",
  "not dead"
]

.babelrc


  "presets": [
   [
    "@babel/preset-env",
    
      "useBuiltIns": "usage",
      "corejs": 3
    
   ]
 ]

【讨论】:

我忘了设置 SCSS 条目。然后我尝试了我的代码和你的代码,都返回 ModuleBuildError: ... @import ..... 知道如何解决吗? 如果你导入到模块 js -> 'import' ../scss/modules/_article.scss'; 或 webpack.config.js `entry: script: ['./sources/js/index.js', './sources/ scss/main.scss'], ,` 我用你的代码和我的代码试了一百次,总是在 SCSS 文件中的 node_modules @import 上返回错误。我更新了我的问题代码并插入了错误的打印屏幕。正如 webpack 文档所建议的那样,我已经尝试在 SCSS 文件的文件名之前添加 ~ ,但我没有成功。请帮帮我。 读取尚未更新,但可以正常使用:github.com/rafaelperozin/webpack-project-structure 非常感谢您的帮助。我克隆了存储库并运行了 yarn install。当我运行 npm run start 时显示错误:spawn cmd ENOENT 并且当我运行 npm run build 时显示 UglifyJs Unexpected token:keyword。知道可能是什么吗?

以上是关于Webpack + SASS + Autoprefixer 不生成 CSS 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vuejs+Webpack 中包含外部 sass 目录?

Sass webpack 图片url路径问题

如何实现 SASS 以与原始 webpack 做出反应?

Sass 与 CSS 模块和 Webpack

Webpack, sass-loader w/ node-sass 无法解析模块 @import ("Unexpected character '@'")

SASS 未在 React / Webpack 项目中呈现