Grunt/SASS:将CSS输出到单个文件中,并保持对多个源文件的源映射为真
Grunt/SASS: Output CSS into a single file, and keep source mapping true to multiple source files
我正在 Grunt 任务中设置 SASS 源地图 (grunt-contrib-sass)。理想情况下,我所有的项目 CSS 都将合并到一个文件中,并使源映射与原始源保持一致。
我最初的想法是,将输出源保存在单独的文件中是最简单的,这样会很容易,因为映射是一对一的,只有一个 .css 输出文件对于每个 .scss 源文件。但这对于我们的其他项目来说并不是一个理想的解决方案,因为我们希望将 HTTP 请求保持在最低限度。
我可以看到如何组合我的源文件,并从中输出 SASS,作为一个输出文件,或者我可以在 SASS 导出后连接我的 .css 输出它,但显然,映射在这两种实现中都不是真的。
这似乎是 grunt-contrib-sass 的一个特性,但我没有找到这样的特性。
我的 SASS 配置如下所示:
sass: {
dist: {
files: [{
expand: true,
cwd: './src/',
src: ['**/*.scss', '**/*.sass'],
dest: './dist',
ext: '.css'
}],
options: {
style: 'compressed',
}
}
},
我尝试了 documentation 中的样式选项,发现四个中只有两个 'compressed' 和 'expanded' 实际有效。 'compact' 和 'nested' 不起作用。我没有看到符合我需要的选项。
如何从 SASS 输出到单个 CSS 文件,并使多个源文件的源映射保持真实?
一种解决方案可能是为开发编译为单独的文件,但为生产编译为 css 文件。这可能是显而易见的解决方案,因为无论如何我们都不希望在生产中加载地图文件。
但如果有一个直接开箱即用的组合文件选项,那仍然会更容易。
为了将所有样式输出到单个 CSS 样式表中,我建议在 scss 目录的根目录中放置一个 main.scss
文件,在其中放置 @import
语句以包含您想要的所有其他 scss 文件的顺序正确。
确保在所有部分文件名(您正在导入的文件)前加上下划线 _
,例如 _homepage-styles.scss
。这很重要,因为它告诉 sass 编译器忽略将这些文件编译成它们的 CSS 等价物。因此,编译器将为每个 SCSS 文件输出一个 CSS 文件 没有 下划线 _
.
所以你的输出将是 main.css
对于源地图,在 SASS 配置的选项下添加:
options: {
'sourcemap': 'auto'
}
它应该映射到各个 scss 文件。 :)
我正在 Grunt 任务中设置 SASS 源地图 (grunt-contrib-sass)。理想情况下,我所有的项目 CSS 都将合并到一个文件中,并使源映射与原始源保持一致。
我最初的想法是,将输出源保存在单独的文件中是最简单的,这样会很容易,因为映射是一对一的,只有一个 .css 输出文件对于每个 .scss 源文件。但这对于我们的其他项目来说并不是一个理想的解决方案,因为我们希望将 HTTP 请求保持在最低限度。
我可以看到如何组合我的源文件,并从中输出 SASS,作为一个输出文件,或者我可以在 SASS 导出后连接我的 .css 输出它,但显然,映射在这两种实现中都不是真的。
这似乎是 grunt-contrib-sass 的一个特性,但我没有找到这样的特性。
我的 SASS 配置如下所示:
sass: {
dist: {
files: [{
expand: true,
cwd: './src/',
src: ['**/*.scss', '**/*.sass'],
dest: './dist',
ext: '.css'
}],
options: {
style: 'compressed',
}
}
},
我尝试了 documentation 中的样式选项,发现四个中只有两个 'compressed' 和 'expanded' 实际有效。 'compact' 和 'nested' 不起作用。我没有看到符合我需要的选项。
如何从 SASS 输出到单个 CSS 文件,并使多个源文件的源映射保持真实?
一种解决方案可能是为开发编译为单独的文件,但为生产编译为 css 文件。这可能是显而易见的解决方案,因为无论如何我们都不希望在生产中加载地图文件。
但如果有一个直接开箱即用的组合文件选项,那仍然会更容易。
为了将所有样式输出到单个 CSS 样式表中,我建议在 scss 目录的根目录中放置一个 main.scss
文件,在其中放置 @import
语句以包含您想要的所有其他 scss 文件的顺序正确。
确保在所有部分文件名(您正在导入的文件)前加上下划线 _
,例如 _homepage-styles.scss
。这很重要,因为它告诉 sass 编译器忽略将这些文件编译成它们的 CSS 等价物。因此,编译器将为每个 SCSS 文件输出一个 CSS 文件 没有 下划线 _
.
所以你的输出将是 main.css
对于源地图,在 SASS 配置的选项下添加:
options: {
'sourcemap': 'auto'
}
它应该映射到各个 scss 文件。 :)