Gruntjs 如何将autoprefixer与PostCs和Grunt一起用于多个文件?
标题说明了一切。我的POSTSS任务如下:Gruntjs 如何将autoprefixer与PostCs和Grunt一起用于多个文件?,gruntjs,postcss,Gruntjs,Postcss,标题说明了一切。我的POSTSS任务如下: postcss: { options: { processors: [ require('autoprefixer')({browsers: ['last 2 versions']}), require('cssnext')(), require('precss')() ] },
postcss: {
options: {
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('cssnext')(),
require('precss')()
]
},
dist: {
src: '*.css',
dest: 'style.css',
}
},
目前,我有另一个css文件,名为StyleHuman,我还想加上前缀。但是,该任务仅将style.css文件作为缩小版本的前缀。问题
问题在于src:和dest:config。使用src:'*.css'时,您要求postsss任务处理它找到的所有.css文件,然后使用dest:style.css时,您要求将所有处理过的.css文件输出到一个名为style.css的文件中。grunt postcss仅将其处理的最后一个文件写入style.css
解决
你的问题有几种解决办法
1.
首先,如果未指定dest选项,grunt PostCs将就地处理和更新所有src文件,覆盖原始文件:
postcss: {
options: {
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('cssnext')(),
require('precss')()
]
},
dist: {
src: '*.css'
}
}
如果你想保留你的src文件,那就不太好了
2.
您可以将该选项与expand一起使用
这将处理所有的.css文件,并将它们输出到build/文件夹
3.
用于将css文件复制到输出文件夹,如/build,然后使用grunt postcss就地处理它们。
一个完整的例子:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-postcss');
grunt.registerTask('css', ['copy:postcss', 'postcss']);
grunt.initConfig({
copy: {
postcss: {
files: [
{
src: 'css/*.css',
dest: './build/',
expand: true,
flatten: true
}
]
}
},
postcss: {
options: {
map: true, // inline sourcemaps
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('postcss-cssnext')(),
require('precss')()
]
},
dist: {
files: [
{
src: 'build/*.css'
}
]
}
}
});
};
有关展开和展平选项的说明,请参阅上的grunt文档
在这里,我们使用复制任务将src css文件复制到build文件夹,然后使用postss任务就地处理它们。我已经用grunt.registerTask'css',['copy:postsss','postsss']创建了一个任务;您可以调用它来使用grunt css运行这两个步骤
4.
如果您想将您的文件连接到一个css文件中,这是我使用postcss的首选方式,那么请创建一个main.css文件,然后使用precss或将所有其他css文件拉到main.css中。像这样:
postcss: {
options: {
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('cssnext')(),
require('precss')()
]
},
dist: {
src: 'main.css',
dest: 'build/main.css'
}
}
main.css:
@import "style.css";
@import "style-human.css";
在这里,postcss负责定位、处理和连接css文件,而grunt任务只需担心main.css
供参考
您应该使用postsss cssnext包而不是cssnext,因为cssnext包已经几个月没有更新了
同时使用postsss cssnext和autoprefixer也是多余的,因为postsss cssnext已经包含autoprefixer。问题出在哪里
问题在于src:和dest:config。使用src:'*.css'时,您要求postsss任务处理它找到的所有.css文件,然后使用dest:style.css时,您要求将所有处理过的.css文件输出到一个名为style.css的文件中。grunt postcss仅将其处理的最后一个文件写入style.css
解决
你的问题有几种解决办法
1.
首先,如果未指定dest选项,grunt PostCs将就地处理和更新所有src文件,覆盖原始文件:
postcss: {
options: {
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('cssnext')(),
require('precss')()
]
},
dist: {
src: '*.css'
}
}
如果你想保留你的src文件,那就不太好了
2.
您可以将该选项与expand一起使用
这将处理所有的.css文件,并将它们输出到build/文件夹
3.
用于将css文件复制到输出文件夹,如/build,然后使用grunt postcss就地处理它们。
一个完整的例子:
module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-contrib-copy');
grunt.loadNpmTasks('grunt-postcss');
grunt.registerTask('css', ['copy:postcss', 'postcss']);
grunt.initConfig({
copy: {
postcss: {
files: [
{
src: 'css/*.css',
dest: './build/',
expand: true,
flatten: true
}
]
}
},
postcss: {
options: {
map: true, // inline sourcemaps
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('postcss-cssnext')(),
require('precss')()
]
},
dist: {
files: [
{
src: 'build/*.css'
}
]
}
}
});
};
有关展开和展平选项的说明,请参阅上的grunt文档
在这里,我们使用复制任务将src css文件复制到build文件夹,然后使用postss任务就地处理它们。我已经用grunt.registerTask'css',['copy:postsss','postsss']创建了一个任务;您可以调用它来使用grunt css运行这两个步骤
4.
如果您想将您的文件连接到一个css文件中,这是我使用postcss的首选方式,那么请创建一个main.css文件,然后使用precss或将所有其他css文件拉到main.css中。像这样:
postcss: {
options: {
processors: [
require('autoprefixer')({browsers: ['last 2 versions']}),
require('cssnext')(),
require('precss')()
]
},
dist: {
src: 'main.css',
dest: 'build/main.css'
}
}
main.css:
@import "style.css";
@import "style-human.css";
在这里,postcss负责定位、处理和连接css文件,而grunt任务只需担心main.css
供参考
您应该使用postsss cssnext包而不是cssnext,因为cssnext包已经几个月没有更新了
同时使用PostSS cssnext和autoprefixer也是多余的,因为PostSS cssnext已经包括autoprefixer。谢谢,朋友。第一个解决方案非常适合我,因为我不需要创建其他文件。我首先在寻找一种向dest添加更多文件的方法:“style.css”:谢谢你,安德里安。第一个解决方案非常适合我,因为我不需要创建其他文件。我首先在寻找一种向dest添加更多文件的方法:“style.css”: