当前位置: 首页 > 知识库问答 >
问题:

如何用autoprefix和缩微为sass文件生成正确的源映射

边国安
2023-03-14

我正在尝试配置gulp以将SASS(*.scss)文件转换为CSS、autoprefix,并且还想为编译的CSS文件生成一个源映射文件。我正在尝试创建两个css文件,一个是普通的,另一个是它的缩小版。这两个CSS文件都需要有源映射。我有以下gulp配置文件,但是,由它生成的源映射是不正确的。当我在没有autoprefixer的情况下运行gulp任务时,一切都很好,但是使用autoprefixer时,sourcemaps就会被弄乱,即在chorme dev Tools中打开时,它指向了不正确的行号。

我尝试过多种配置,如内联源映射和单独的源映射。我甚至试着在自动重修复之前加载sourcemaps,然后在自动重修复完成之后将其写入文件。

const { src, dest } = require('gulp');
const sass = require('gulp-sass');
const postcss = require('gulp-postcss');
const clone = require('gulp-clone');
const merge = require('merge-stream');
const rename = require('gulp-rename');
const sourcemaps = require('gulp-sourcemaps');
const sassUnicode = require('gulp-sass-unicode');

const prefix = require('autoprefixer');
const minify = require('cssnano');

const {paths} = require('./config.html" target="_blank">js');

/* 
* Node Sass will be used by defualt, but it is set explicitly here for -
* forwards-compatibility in case the default ever changes 
*/
sass.compiler = require('node-sass');

sass_options = {
    // outputStyle: 'compressed',
    outputStyle: 'compact',
    // outputStyle: 'nested',
    // outputStyle: 'expanded'
    sourceComments: false,
    precision: 10
};

prefix_options = {
    browsers: ['last 2 versions', '> 5%', 'Firefox ESR'],
    cascade: false
};

minify_options = {
    discardComments: {
        removeAll: true
    }
}

// Process, compile, lint and minify Sass files
const buildStyles = function (done) {
    var source = src(paths.styles.input)
        .pipe(sourcemaps.init())
        .pipe(sass(sass_options).on('error', sass.logError))
        // .pipe(sassUnicode()) 
        .pipe(sourcemaps.write({includeContent: false}))
        .pipe(sourcemaps.init({loadMaps: true}))
        .pipe(postcss([prefix(prefix_options)]));

    // Create non-minified css file and its sourcemaps 
    var pipe1 = source.pipe(clone())
        .pipe(sourcemaps.write('.'))
        .pipe(dest(paths.styles.output));

    // Create minified css file and its sourcemaps
    var pipe2 = source.pipe(clone())
        .pipe(rename({ suffix: '.min' }))
        .pipe(postcss([minify(minify_options)]))
        .pipe(sourcemaps.write('.'))
        .pipe(dest(paths.styles.output));

    return merge(pipe1, pipe2);
};

我期望正确的源映射,即使在自动重新修复,但与当前的设置,我得到了不正确的行号。(对于sourcemap文件中嵌套元素中子元素的所有样式,sourcemap指向根元素)。

在此输入图像说明

共有1个答案

史谦
2023-03-14

您为什么在buildstyles->source中调用sourceMaps.init两次?

sourcemaps.init应该出现在sourcemaps.write之前。在您的代码中,对于buildfiles`中的source则是相反的。

老实说,在我看来,你的构建看起来比它需要的要复杂得多,这导致了问题。

 类似资料:
  • 我有一个将SASS编译成CSS的Gulp任务。这里有一个例子 上面的操作适用于其他的一切--将映射写入磁盘、添加前缀等。我使用的是最新的nodejs、gulpjs和相关的npm软件包。 my Stylesheets文件夹中的文件夹/资产结构示例: 例如,print.scss映射将正确具有。但是sectiona/style.scss映射将具有而不是我所期望的。 我已经确认将/scss/section

  • 问题内容: 使用Maven项目和Jar文件时,在引用资源时遇到麻烦的问题… 我将所有资源都放在一个专用文件夹/ src / main / resources中,该文件夹是Eclipse中构建路径的一部分。使用以下文件引用文件 这在Eclipse中工作正常,但在Jar文件中失败-资源位于jar根目录正下方的文件夹中… 有谁知道在JAR和Eclipse中同时引用文件的“最佳实践”? 编辑: 问题是,尽

  • 我测试了简单的scala程序并用calac编译了它 如果我运行java-cp。;scala图书馆。“jar测试”,它工作正常。是的,scala图书馆。jar文件在同一个目录中。 这是我的清单文件manifest.txt 我用罐子cfm Test.jarmanifest.txt 如果我解压生成的测试。jar文件和打开清单文件,它不包含主类字段。因此,它不能与java-jar测试一起运行。罐子 我可以

  • 我试图放大我的mandelbrot集,我读到了这个问题:如何简单地放大mandelbrot集,但我很难理解它,它不起作用。当我这样计算新的实数和复数时: 新的mandelbrot在两个轴上都有点变形?怎么了?以下是一个例子:http://www.phpdevpad.de/index.php?id=190.

  • 最近我看到了带有扩展随一些JavaScript库(如Angular)一起提供,这在我脑海中引起了一些问题: 是干什么用的?为什么Angular的人关心传递一个文件? 我如何(作为一个JavaScript开发人员)使用文件? 我应该关心为我的JavaScript应用程序创建文件吗? 它是如何被创建的?我看了一下,里面充满了奇怪格式的字符串,所以我假设它不是手动创建的。

  • 输出:style.min.css 我尝试过的事情 1)尝试:将rubySass的sourcemap设置为false结果:无差异