Grunt cssmin / CleanCSS 源地图变基
Grunt cssmin / CleanCSS source map rebasing
我使用 cssmin 具有以下 "Content" 文件夹结构:
src
|--dir1
| |--style1.css
| |--images
| |--image1.png
|--dir2
|--style2.css
|--images
|--image2.png
dist
|--styles.min.css
|--styles.min.css.map
其中 styles.min.css 和 styles.min.css.map 是 concatenating/minifying 文件夹中所有样式表的结果。
我首先遇到的问题是 styles.min.css 在错误的位置包含图像的 URL(即 "images/image1.png" 而不是“../src/dir1/images/image1.png”),但幸运的是这个 grunt 配置已修复那:
cssmin: {
options: {
rebase: true,
sourceMap: true
},
all: {
options: {
keepSpecialComments: 0
},
files: {
'content/dist/styles.min.css': ["content/src/dir1/style1.css", "content/src/dir2/style2.css"]
}
}
}
新问题:生成的 sourcemap ("styles.min.css.map") 包含这样的源:["content/src/dir1/style1.css"、"content/src/dir2/style2.css"] 而不是 [ “../src/dir1/style1.css”、“../src/dir2/style2.css”。这意味着地图指向的位置不正确,例如:
"content/dist/content/src/dir1/style1.css" 和 "content/dist/content/src/dir2/style2.css"
我该怎么做才能解决这个问题?
作为参考,我也尝试了 csswring,但是尽管 sourcemaps 工作正常,我发现一般 image/import url rebase 不能正常工作,所以回到css分钟
非常感谢!
想出了我自己的解决方案。我写了一个读取源映射 JSON 的任务,获取源数组,重新设置它们的基数,然后再次写入文件。这个解决方案似乎对我很有效,希望如果他们处于类似情况,这也可以帮助其他人。只是 运行 你的 cssmin 任务,然后是这个:
grunt.registerTask("rebase-css-sourcemap-sources", "Rebases the CSS source map urls", function() {
var filePath = "./content/dist/styles.min.css.map";
if (grunt.file.exists(filePath)) {
var sourceMap = grunt.file.readJSON(filePath);
var sources = sourceMap.sources;
if (sources) {
for (var i = 0; i < sources.length; i++) {
sources[i] = sources[i].replace("content/src", "../src");
}
grunt.file.write(filePath, JSON.stringify(sourceMap));
grunt.log.ok("Rebased CSS source map source urls.");
}
} else {
grunt.log.error("Source map file does not exist: " + filePath);
}
});
虽然这个解决方案对我有用,但如果有人知道解决这个问题的替代方法,最好只使用 cssmin,那会更好。
我使用 cssmin 具有以下 "Content" 文件夹结构:
src
|--dir1
| |--style1.css
| |--images
| |--image1.png
|--dir2
|--style2.css
|--images
|--image2.png
dist
|--styles.min.css
|--styles.min.css.map
其中 styles.min.css 和 styles.min.css.map 是 concatenating/minifying 文件夹中所有样式表的结果。
我首先遇到的问题是 styles.min.css 在错误的位置包含图像的 URL(即 "images/image1.png" 而不是“../src/dir1/images/image1.png”),但幸运的是这个 grunt 配置已修复那:
cssmin: {
options: {
rebase: true,
sourceMap: true
},
all: {
options: {
keepSpecialComments: 0
},
files: {
'content/dist/styles.min.css': ["content/src/dir1/style1.css", "content/src/dir2/style2.css"]
}
}
}
新问题:生成的 sourcemap ("styles.min.css.map") 包含这样的源:["content/src/dir1/style1.css"、"content/src/dir2/style2.css"] 而不是 [ “../src/dir1/style1.css”、“../src/dir2/style2.css”。这意味着地图指向的位置不正确,例如:
"content/dist/content/src/dir1/style1.css" 和 "content/dist/content/src/dir2/style2.css"
我该怎么做才能解决这个问题?
作为参考,我也尝试了 csswring,但是尽管 sourcemaps 工作正常,我发现一般 image/import url rebase 不能正常工作,所以回到css分钟
非常感谢!
想出了我自己的解决方案。我写了一个读取源映射 JSON 的任务,获取源数组,重新设置它们的基数,然后再次写入文件。这个解决方案似乎对我很有效,希望如果他们处于类似情况,这也可以帮助其他人。只是 运行 你的 cssmin 任务,然后是这个:
grunt.registerTask("rebase-css-sourcemap-sources", "Rebases the CSS source map urls", function() {
var filePath = "./content/dist/styles.min.css.map";
if (grunt.file.exists(filePath)) {
var sourceMap = grunt.file.readJSON(filePath);
var sources = sourceMap.sources;
if (sources) {
for (var i = 0; i < sources.length; i++) {
sources[i] = sources[i].replace("content/src", "../src");
}
grunt.file.write(filePath, JSON.stringify(sourceMap));
grunt.log.ok("Rebased CSS source map source urls.");
}
} else {
grunt.log.error("Source map file does not exist: " + filePath);
}
});
虽然这个解决方案对我有用,但如果有人知道解决这个问题的替代方法,最好只使用 cssmin,那会更好。