Home Web Front-end HTML Tutorial gulp-ruby-sass与gulp-sass_html/css_WEB-ITnose

gulp-ruby-sass与gulp-sass_html/css_WEB-ITnose

Jun 24, 2016 am 11:38 AM

I have been working in js since graduation. I have never written css, and my understanding of css is still at the level of self-study in school. My basic skills are too poor, so I have recently started to study in depth.

I learned that sass and less are more popular, so I decided to choose one. I won’t discuss the pros and cons of the two. I chose sass because it is closer to ruby.

Usually when writing sass, it is necessary to save and compile, but recently I have been using visual studio code to develop. This editor is not mature enough and does not support the function of compiling sass. I can only do it myself. Let's write a script and do it.

There is nothing to say about using gulp to do this work. I searched on npm and found gulp-ruby-sass because the ruby ​​environment is installed on the machine. The next script is that the installation is smooth and the use is very cool.

var gulp = require('gulp');var sass = require('gulp-ruby-sass');var group = require('gulp-group-files');var sassFiles = {    "xxx" : {        src: "./xxx/styles/sass/index.scss",        dest: "./xxx/styles/"    }};gulp.task('sass:compile',function (){    return group(sassFiles,function (key,fileset){        return sass(fileset.src)            .on('error', function (err) {                console.error('compile sass file error: %s', err.message);            })            .pipe(gulp.dest(fileset.dest));    })();});gulp.task('sass:watch',function (){    gulp.watch('**/*.scss',['sass:compile'])});gulp.task('default',['sass:watch']);
Copy after login

The code looks very nice, there is no problem, I am a little complacent. However, I encountered such a strange thing today, which is the reason for writing this article.

A problem occurred when I added an item to the projects that needed to be built. If talk is cheap, just show u the code.

var gulp = require('gulp');var sass = require('gulp-ruby-sass');var group = require('gulp-group-files');var sassFiles = {    "xxx" : {        src: "./xxx/styles/sass/index.scss",        dest: "./xxx/styles/"    },    "yyy" : {        src: "./yyy/styles/sass/index.scss",        dest: "./yyy/styles/"    }};gulp.task('sass:compile',function (){    return group(sassFiles,function (key,fileset){        return sass(fileset.src)            .on('error', function (err) {                console.error('compile sass file error: %s', err.message);            })            .pipe(gulp.dest(fileset.dest));    })();});gulp.task('sass:watch',function (){    gulp.watch('**/*.scss',['sass:compile'])});gulp.task('default',['sass:watch']);
Copy after login

Compared with the above, there is just one more thing that needs to be compiled. It doesn't look like a problem, but... The content of xxx/styles/index.css generated by compilation is actually yyy/styles/index.css, and sometimes the other way around.

I once suspected that there was a problem with my code. I changed it several times, but the problem remained the same. I have no choice but to look at the gulp-ruby-sass source code. I have a general understanding of the principle of this plug-in, as follows:

  • Create a temporary directory to store the css files generated by compilation;

  • Call the sass command to compile and generate The css file is first placed in the temporary directory;

  • reads the content of the css file into a stream and pipes it to gulp.dest defined in the gulp task. This completes the compilation and compilation of the scss file. Generation of css files;

  • Delete temporary directories and temporary files

  • The cause of the problem is the deletion of temporary files and directories in step 4, continuously When compiling multiple files, only a temporary directory is generated. After the first file is compiled successfully, the temporary directory is deleted, and subsequent file readings will cause errors. Depending on how long the operation takes, the following situations may occur:

  • Only one of the two files is compiled successfully

  • The content of the two files is the same (if the file name Same)

  • The file content does not match
    ...

  • After learning about the execution process of gulp-ruby-sass, I decided to abandon it. The reason is For the problems listed above, I don’t want to change my code.

    Continuing to search on npm, I found gulp-sass.

    npm install --save-dev gulp-sass. After waiting, npm reported an error.

    wtf!!! Well, just think of it as a blessing in disguise. As can be seen from npm-debug.log, gulp-sass relies on the node-sass library. When installing the node-sass library, you need to execute a script, and if something goes wrong during the process, you can try installing it as an administrator.

    Install again as administrator, this time it is successful, and then change gulpfile.js

    var gulp = require('gulp');var sass = require('gulp-sass');var group = require('gulp-group-files');var sassFiles = {    "xxx" : {        src: "./xxx/styles/sass/index.scss",        dest: "./xxx/styles/"    },    "yyy" : {        src: "./yyy/styles/sass/index.scss",        dest: "./yyy/styles/"    }};gulp.task('sass:compile',function (){    return group(sassFiles,function (key,fileset){        return gulp.src(fileset.src)            .pipe(sass().on('error', sass.logError))            .pipe(gulp.dest(fileset.dest));    })();});gulp.task('sass:watch',function (){    gulp.watch('**/*.scss',['sass:compile'])});gulp.task('default',['sass:watch']);
    Copy after login

    By looking at the dependencies and part of the source code, you can find that gulp-ruby-sass and gulp The difference between -sass lies in the different compilers and different compilation processes.

    • gulp-ruby-sass is a call to sass, so a ruby ​​environment is required, and temporary directories and temporary files need to be generated

    • gulp-sass is a call to For node-sass, it is enough to have a node.js environment. The compilation process does not require temporary directories and files, and is directly converted through the buffer content.

    After fixing this problem, I can use it happily and I can continue to learn css.

    Statement of this Website
    The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

    Hot AI Tools

    Undresser.AI Undress

    Undresser.AI Undress

    AI-powered app for creating realistic nude photos

    AI Clothes Remover

    AI Clothes Remover

    Online AI tool for removing clothes from photos.

    Undress AI Tool

    Undress AI Tool

    Undress images for free

    Clothoff.io

    Clothoff.io

    AI clothes remover

    AI Hentai Generator

    AI Hentai Generator

    Generate AI Hentai for free.

    Hot Article

    R.E.P.O. Energy Crystals Explained and What They Do (Yellow Crystal)
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. Best Graphic Settings
    3 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    R.E.P.O. How to Fix Audio if You Can't Hear Anyone
    4 weeks ago By 尊渡假赌尊渡假赌尊渡假赌
    WWE 2K25: How To Unlock Everything In MyRise
    1 months ago By 尊渡假赌尊渡假赌尊渡假赌

    Hot Tools

    Notepad++7.3.1

    Notepad++7.3.1

    Easy-to-use and free code editor

    SublimeText3 Chinese version

    SublimeText3 Chinese version

    Chinese version, very easy to use

    Zend Studio 13.0.1

    Zend Studio 13.0.1

    Powerful PHP integrated development environment

    Dreamweaver CS6

    Dreamweaver CS6

    Visual web development tools

    SublimeText3 Mac version

    SublimeText3 Mac version

    God-level code editing software (SublimeText3)

    What is the purpose of the <progress> element? What is the purpose of the <progress> element? Mar 21, 2025 pm 12:34 PM

    The article discusses the HTML &lt;progress&gt; element, its purpose, styling, and differences from the &lt;meter&gt; element. The main focus is on using &lt;progress&gt; for task completion and &lt;meter&gt; for stati

    What is the purpose of the <datalist> element? What is the purpose of the <datalist> element? Mar 21, 2025 pm 12:33 PM

    The article discusses the HTML &lt;datalist&gt; element, which enhances forms by providing autocomplete suggestions, improving user experience and reducing errors.Character count: 159

    What are the best practices for cross-browser compatibility in HTML5? What are the best practices for cross-browser compatibility in HTML5? Mar 17, 2025 pm 12:20 PM

    Article discusses best practices for ensuring HTML5 cross-browser compatibility, focusing on feature detection, progressive enhancement, and testing methods.

    What is the purpose of the <meter> element? What is the purpose of the <meter> element? Mar 21, 2025 pm 12:35 PM

    The article discusses the HTML &lt;meter&gt; element, used for displaying scalar or fractional values within a range, and its common applications in web development. It differentiates &lt;meter&gt; from &lt;progress&gt; and ex

    How do I use HTML5 form validation attributes to validate user input? How do I use HTML5 form validation attributes to validate user input? Mar 17, 2025 pm 12:27 PM

    The article discusses using HTML5 form validation attributes like required, pattern, min, max, and length limits to validate user input directly in the browser.

    What is the viewport meta tag? Why is it important for responsive design? What is the viewport meta tag? Why is it important for responsive design? Mar 20, 2025 pm 05:56 PM

    The article discusses the viewport meta tag, essential for responsive web design on mobile devices. It explains how proper use ensures optimal content scaling and user interaction, while misuse can lead to design and accessibility issues.

    What is the purpose of the <iframe> tag? What are the security considerations when using it? What is the purpose of the <iframe> tag? What are the security considerations when using it? Mar 20, 2025 pm 06:05 PM

    The article discusses the &lt;iframe&gt; tag's purpose in embedding external content into webpages, its common uses, security risks, and alternatives like object tags and APIs.

    Gitee Pages static website deployment failed: How to troubleshoot and resolve single file 404 errors? Gitee Pages static website deployment failed: How to troubleshoot and resolve single file 404 errors? Apr 04, 2025 pm 11:54 PM

    GiteePages static website deployment failed: 404 error troubleshooting and resolution when using Gitee...

    See all articles