我有一个巨大的样式表代码库,其中包含多个文件夹和子文件夹中的许多 .scss 文件,我想将它们编译为 .css 文件。到目前为止,一切都很好。
但无论出于何种原因,我都需要将 .css 文件编译到与每个源文件夹中的 .scss 文件不同的目标文件夹中。
我拥有的源路径:
src/project-1/scss/project-1.scss
src/project-2/subfolder/scss/project-2.scss
我需要的目标路径:
src/project-1/css/project-1.css
src/project-2/subfolder/css/project-2.css
我的 grunt 任务设置是这样的:
sass: {
prod: {
options: {
style: 'expanded'
},
files: [{
expand: true,
cwd: 'src',
src: ['**/*.scss'],
dest: 'src',
ext: '.css',
}]
}
}
此设置将每个 .css 文件编译到与 .scss 文件相同的文件夹中。我需要将它们从“scss”文件夹中取出并放入同一父文件夹中的“css”文件夹中。
寻找解决方案:
我在该领域尝试了不同的值,但dest
没有任何运气。
我尝试使用 grunt-contrib-copy 和一个rename()
函数:
copy: {
target: {
files: [{
expand: true,
cwd: 'src',
src: ['**/*.css'],
dest: 'src/',
rename: function(dest, src) {
return dest + src.replace(/\/scss\/$/, "/css/");
}
}]
}
}
后者“几乎”有效。我将文件复制到自己的目的地,同时尝试将“scss”文件夹重命名为“css”,但替换功能似乎没有考虑源路径中的文件夹名称,只有文件名。
我是接近解决方法还是正走向死胡同?
编辑:找到解决方案
rename
我对解决我的问题的函数做了一些小改动:
sass: {
prod: {
options: {
style: 'expanded'
},
files: [{
expand: true,
cwd: "src",
src: ["**/*.scss"],
dest: "src/",
ext: ".css",
rename: function (dest, src) {
return dest + src.replace('scss', 'css'); // The target file is written to folder "css" instead of "scss" by renaming the folder
}
}]
}
}
这给了我在与源 /scss 文件夹相同级别的新 /css 文件夹中编译的 CSS。
例如:
src/project-1/scss/project-1.scss
编译为src/project-1/css/project-1.css
.
我也对我的任务和任务使用完全相同的files: [{...}]
设置,并且它们都写入同一个文件夹和文件。grunt-autoprefixer
grunt-contrib-cssmin