【问题标题】:Trying to create single css file for single sass file (as well as using multiple sass file to one css file) with Grunt尝试使用 Grunt 为单个 sass 文件创建单个 css 文件(以及对一个 css 文件使用多个 sass 文件)
【发布时间】:2015-10-23 00:30:41
【问题描述】:

我有一个项目使用标准设置,该设置使用多个 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 文件?

非常感谢任何帮助。

【问题讨论】:

    标签: css compilation sass gruntjs


    【解决方案1】:

    根据您的第一个解决方案和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) p>

    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'
        }]
      }
    };
    

    希望对您有所帮助。

    祝你好运

    【讨论】:

    • @lharby 任何反馈将不胜感激。快速修复有什么不同吗?我也可能感兴趣。
    • 我尝试了 Colin Bacons 的回答,虽然我不得不稍微改变我的工作流程,但它确实有效。所以我仍然想知道是否可以为不同的文件文件夹创建两个单独的任务。我相信这一定是有可能的。
    【解决方案2】:

    要编译文件夹中的所有文件,您可以这样做:

    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 
              }
            ]
        }
    }
    

    【讨论】:

    • 但我仍然需要将source/sass/main.scss 映射到css/main.css
    • 地图是什么意思?
    • 我需要多个 SASS 文件的当前设置到一个 CSS 文件,以及从小部件子文件夹中为任何 sass 文件创建单个 css 文件的选项。所以这两者应该被视为单独的任务。
    • 只有没有下划线前缀的文件可以编译成单独的CSS文件。如果您的小部件没有下划线前缀,那么上面的代码会将它们全部编译成单独的 CSS 文件。您的main.scss 将拥有@import 的小部件,并将编译为单个文件。试一试。
    • 好的,谢谢。这只有效,我必须将所有 css 文件放在一个文件夹中。
    猜你喜欢
    • 2015-04-27
    • 2016-02-15
    • 2014-12-26
    • 2011-11-10
    • 1970-01-01
    • 2015-12-17
    • 2013-11-10
    • 2015-01-22
    相关资源
    最近更新 更多