尝试使用Grunt为单个sass文件创建单个css文件(以及使用多个sass文件到一个css文件)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了尝试使用Grunt为单个sass文件创建单个css文件(以及使用多个sass文件到一个css文件)相关的知识,希望对你有一定的参考价值。

我有一个项目使用标准设置使用多个sass文件和部分编译成一个全局css文件。

我现在需要将单个sass文件映射到单个css文件(这些是组件/小部件)的功能。

所以在我的最终标记中,小部件将具有以下内容:

<link rel="stylesheet" href="css/main.css"/>
<link rel="stylesheet" href="css/widgets/widget-name.css"/>

我在gruntfile中尝试了一些选项。当前设置如下所示:

 sass: {
        dist: {
            options: {
                style: 'compressed'
            },
            files: {
                 "Webcontent/css/site.css": "WebContent/source/sass/site.scss"
            }
        } 
    },
    watch: {
        src: {
            files: ['WebContent/source/sass/*.scss'],
            tasks: ['sass'],
        }
    }

我尝试过以下方法:

sass: {
        dist: {
            options: {
                style: 'compressed'
            },
            files: {
                 "Webcontent/css/site.css": "WebContent/source/sass/site.scss",
                 "Webcontent/css/widgets/*.css": "WebContent/source/sass/widgets/*.scss",
            }
        } 
    },

以及:

sass: {
        dist: {
            options: {
                style: 'compressed'
            },

            files: [
                {src: 'WebContent/source/sass/site.scss', dest: 'Webcontent/css/site.css'},
                {src: 'WebContent/source/sass/widgets/*.scss', dest: 'Webcontent/css/widgets/*.css' },
              ],
        } 
    },
    watch: {
        src: {
            files: ['WebContent/source/sass/*.scss', 'WebContent/source/sass/widgets/*.scss'],
            tasks: ['sass'],
        }
    }

我一直在grunt中得到错误:警告:Warning: Unable to write "Webcontent/css/widgets/*.css" file (Error code: ENOENT ).

当然我不必指定目标css文件?

任何帮助非常感谢。

答案

要编译文件夹中的所有文件,您可以执行以下操作:

sass: {
    dist: {
        files: [
          {
            expand: true, // Recursive
            cwd: "WebContent/source/sass", // The startup directory
            src: ["**/*.scss"], // Source files
            dest: "Webcontent/css", // Destination
            ext: ".css" // File extension 
          }
        ]
    }
}
另一答案

基于您的第一个解决方案和http://ryanchristiani.com/getting-started-with-grunt-and-sass/,您的“监视”文件应该更像是这样:

(不确定它是否确实有所作为,但最好试一试)

watch: {
  src: {
    files: 'WebContent/source/sass/*.scss',
    tasks: ['sass'],
  }
}

否则,以这种方式构建Gruntfile.js通常更容易:

(只编译main.scss,所有其他.scss文件都是@import到这个main.scss中)

watch: {
  sass: {
    files: './assets/css/sass/*.scss',
    tasks: ['sass', 'cssmin']
  }
},
sass: require( './assets/custom_modules/sass.js' ).task,
cssmin: require( './assets/custom_modules/cssmin.js' ).task

然后在sass.js

exports.task = {
  dist: {
    options: {
      style: 'expanded',
      lineNumbers: true,
      sourcemap: 'none'
    },
    files: [{
      expand: true,
      cwd: 'assets/css/sass/',
      src: [ 'main.scss' ],
      dest: 'assets/css/',
      ext: '.css'
    }]
  }
};

希望它可以帮助。

祝好运'

以上是关于尝试使用Grunt为单个sass文件创建单个css文件(以及使用多个sass文件到一个css文件)的主要内容,如果未能解决你的问题,请参考以下文章

Sass on Grunt总是创建一个空输出

Grunt:将HTML页面捆绑到单个HTML文件中。所有依赖项

如何使用 grunt-sass 编译多个 scss 文件

使用 dart sass 实现,grunt-sass 不编译 css 文件而不抛出错误

在Grunt中为单个文件运行JSHint

如何将scss预编译为webpack中的单个css文件?