grunt sass 和 js 自动加载器
grunt sass and js autoloader
我尝试了一些方法,但无法找到好的解决方案。
我正在使用 grunt 来编译我的 sass 并缩小我的 javascript.
是否可以自动加载特定目录中的每个 .sass 文件和每个 .js 文件?
我试过这样的东西
sass: {
options: {
sourceMap: false
},
dist: {
src: 'src/sass/**/*.sass',
dest: 'dist/css/style.css'
}
}
但这只会加载第一个 sass 文件。
我不确定 concat 到底做了什么,但我也试过了,但没有找到我正在寻找的解决方案。
基本上文件夹 sass/ 中的所有文件都应该编译成 1 个大 style.css 文件,与 javascript.
相同
当然,我可以手动将每个文件导入到 main.sass 左右的文件中,但我喜欢自动加载功能,这样我就不会偷懒,也不会创建新文件,因为我必须添加他们。
编辑:
所以有了这个
files: [{
expand: true,
cwd: "src/sass/",
src: ["**/*.sass"],
dest: "dest/css",
ext: ".css"
}]
其实我可以做我想做的事。问题是我的 mixin 加载得太晚了,它正在抛出一个错误,因为它没有找到我想要包含的 mixin。
这是一种从多个源文件生成单个输出文件的格式:
concat: {
whatever: {
options: { separator: '\n' },
src: ['src/sass/**/*.sass'],
dest: 'build/tmp.sass' // make sure the temporary build/ dir exists!
}
}
仅适用于支持合并多个文件的任务;在本例中是 grunt-contrib-concat
任务。
它产生 dist/css/sass.tmp
,您需要使用 sass
任务处理它:
sass: {
dist: {
files: [{
src: 'build/tmp.sass',
dest: 'dist/css/style.css'
}]
}
}
你要确保它们是 运行 的顺序,如下所示:
grunt.registerTask( 'default', ['concat', 'sass'] ); // add your uglify/cssmin here
但是,我不推荐这样做,因为 sass 文件的顺序是不可控的,它不会使 mixin 可用,即使它们首先被编译为 css -这是毫无意义的,因为他们失去了 'mixin' 格式。最好在单个源文件上 运行 sass 并将其他文件导入该源文件。
更新
关于混合文件的自动加载,
SASS Reference 确实提到您可以使用照顾 @import
的自定义导入程序(用 Ruby 编写);我不确定这是否仅适用于文件的顶级导入,或者也适用于规则内的 @import mixin-name(foo)
,但我不这么认为。
您可以使用另一种方法,该方法基于 concat
,假设您有一个主 sass 文件。您需要向其中添加一个 @import 'all-mixins'
。这个all-mixins.sass
是一个生成的文件:
concat: {
all_mixins: {
options: { separator: '\n' },
src: ['src/sass/mixins/*.sass'],
dest: 'build/all-mixins.sass'
}
}
并且您将指定 sass option loadPath 以将 build/
添加到路径中:
sass: {
dist: {
options: {
loadPath: 'build/'
},
files: [{
src: 'build/tmp.sass',
dest: 'dist/css/style.css'
}]
}
}
这是在不扩展 sass 本身的情况下最接近自动加载的结果。
我尝试了一些方法,但无法找到好的解决方案。 我正在使用 grunt 来编译我的 sass 并缩小我的 javascript.
是否可以自动加载特定目录中的每个 .sass 文件和每个 .js 文件?
我试过这样的东西
sass: {
options: {
sourceMap: false
},
dist: {
src: 'src/sass/**/*.sass',
dest: 'dist/css/style.css'
}
}
但这只会加载第一个 sass 文件。 我不确定 concat 到底做了什么,但我也试过了,但没有找到我正在寻找的解决方案。
基本上文件夹 sass/ 中的所有文件都应该编译成 1 个大 style.css 文件,与 javascript.
相同当然,我可以手动将每个文件导入到 main.sass 左右的文件中,但我喜欢自动加载功能,这样我就不会偷懒,也不会创建新文件,因为我必须添加他们。
编辑:
所以有了这个
files: [{
expand: true,
cwd: "src/sass/",
src: ["**/*.sass"],
dest: "dest/css",
ext: ".css"
}]
其实我可以做我想做的事。问题是我的 mixin 加载得太晚了,它正在抛出一个错误,因为它没有找到我想要包含的 mixin。
这是一种从多个源文件生成单个输出文件的格式:
concat: {
whatever: {
options: { separator: '\n' },
src: ['src/sass/**/*.sass'],
dest: 'build/tmp.sass' // make sure the temporary build/ dir exists!
}
}
仅适用于支持合并多个文件的任务;在本例中是 grunt-contrib-concat
任务。
它产生 dist/css/sass.tmp
,您需要使用 sass
任务处理它:
sass: {
dist: {
files: [{
src: 'build/tmp.sass',
dest: 'dist/css/style.css'
}]
}
}
你要确保它们是 运行 的顺序,如下所示:
grunt.registerTask( 'default', ['concat', 'sass'] ); // add your uglify/cssmin here
但是,我不推荐这样做,因为 sass 文件的顺序是不可控的,它不会使 mixin 可用,即使它们首先被编译为 css -这是毫无意义的,因为他们失去了 'mixin' 格式。最好在单个源文件上 运行 sass 并将其他文件导入该源文件。
更新
关于混合文件的自动加载,
SASS Reference 确实提到您可以使用照顾 @import
的自定义导入程序(用 Ruby 编写);我不确定这是否仅适用于文件的顶级导入,或者也适用于规则内的 @import mixin-name(foo)
,但我不这么认为。
您可以使用另一种方法,该方法基于 concat
,假设您有一个主 sass 文件。您需要向其中添加一个 @import 'all-mixins'
。这个all-mixins.sass
是一个生成的文件:
concat: {
all_mixins: {
options: { separator: '\n' },
src: ['src/sass/mixins/*.sass'],
dest: 'build/all-mixins.sass'
}
}
并且您将指定 sass option loadPath 以将 build/
添加到路径中:
sass: {
dist: {
options: {
loadPath: 'build/'
},
files: [{
src: 'build/tmp.sass',
dest: 'dist/css/style.css'
}]
}
}
这是在不扩展 sass 本身的情况下最接近自动加载的结果。