gulp-ruby-sass与gulp-sass_html/css_WEB-ITnose
毕业后一直从事js这一块的工作,没有写过css,对css的了解程度还停留在学校自学时的水平。基本功太差,最近开始深入学习了。
了解到sass和less比较流行,决定选一个,这俩的优劣就不讨论了。我选的sass,因为和ruby比较亲。
平常写sass的时候保存即编译这个是很有必要的,但最近我一直在用visual studio code开发,这个编辑器还不太成熟,不支持编译sass的功能,只能自己写脚本去搞了。
用gulp来干这活没什么可说的,npm上搜了一下,看中了gulp-ruby-sass,因为机器上装了ruby环境。接下来的剧本就是安装很顺利,使用很潇洒。
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']);
代码看上去很nice吧,没什么问题,我还有点沾沾自喜呢。然而,今天遇到了这样一个怪事,也就是写这篇文章的由来。
当我把需要构建的项目增加了一项后,就出现了问题。talk is cheap,就直接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']);
与上面的相比,只是多了一项需要编译的内容。看上去没什么问题,但是呢。编译生成的xxx/styles/index.css的内容实际为yyy/styles/index.css,有时也会反过来。
一度怀疑是自己代码有问题,改了好几次,问题依旧。没办法,只好去看gulp-ruby-sass源码了。大致了解了这个插件的原理,如下:
创建临时目录,用来存放编译生成的css文件;
调用sass命令,编译生成的css文件先放在临时目录;
将css文件内容读取成stream,pipe到gulp任务内定义的gulp.dest,这样就完成了scss文件的编译和css文件的生成;
将临时目录和临时文件删除
导致问题的原因就是这第4步的删除临时文件和目录,连续编译多个文件时只生成了一个临时目录,而第一个文件编译成功后临时目录被删除,后续的文件读取就会出错。根据操作的耗时,可能会取现以下情况:
两个文件中只有一个编译成功
两个文件内容相同(如果文件名相同)
文件内容不符
...
了解到gulp-ruby-sass的执行过程后,决定弃用,原因就是上面所列的问题,不想改自己的代码了。
继续npm上搜索,找到了gulp-sass。
npm install --save-dev gulp-sass,一番等待后,npm报错了。
wtf!!!好吧,就当是好事多磨吧。从npm-debug.log中可以看出,gulp-sass依赖了node-sass这个库。安装node-sass这个库的时候要执行一个脚本,而在这个过程中出错了,可以试下管理员身份安装。
用管理员身份再安装,这次成功了,然后改下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']);
通过查看依赖关系以及部分源码可以发现,gulp-ruby-sass和gulp-sass的区别就在于编译器的不同和编译过程不同。
gulp-ruby-sass是调用sass,所以需要ruby环境,需要生成临时目录和临时文件
gulp-sass是调用node-sass,有node.js环境就够了,编译过程不需要临时目录和文件,直接通过buffer内容转换。
搞定这个问题后,就可以愉快地使用了,我又能继续学习css了。

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

Cache kemas kini laman web akaun rasmi, perkara ini mudah dan mudah, dan ia cukup rumit untuk minum periuknya. Anda bekerja keras untuk mengemas kini artikel akaun rasmi, tetapi pengguna masih membuka versi lama. Dalam artikel ini, mari kita lihat kelainan dan bertukar di belakang ini dan bagaimana menyelesaikan masalah ini dengan anggun. Selepas membacanya, anda boleh dengan mudah menangani pelbagai masalah caching, yang membolehkan pengguna anda sentiasa mengalami kandungan segar. Mari kita bincangkan asas -asas terlebih dahulu. Untuk meletakkannya secara terang -terangan, untuk meningkatkan kelajuan akses, penyemak imbas atau pelayan menyimpan beberapa sumber statik (seperti gambar, CSS, JS) atau kandungan halaman. Kali seterusnya anda mengaksesnya, anda boleh mengambilnya secara langsung dari cache tanpa perlu memuat turunnya lagi, dan ia secara semula jadi cepat. Tetapi perkara ini juga pedang bermata dua. Versi baru dalam talian,

Artikel ini menunjukkan penambahan sempadan PNG yang cekap ke halaman web menggunakan CSS. Ia berpendapat bahawa CSS menawarkan prestasi unggul berbanding dengan JavaScript atau perpustakaan, memperincikan cara menyesuaikan lebar sempadan, gaya, dan warna untuk kesan halus atau menonjol

Artikel ini membincangkan menggunakan atribut pengesahan bentuk HTML5 seperti had, corak, min, max, dan panjang untuk mengesahkan input pengguna secara langsung dalam penyemak imbas.

Artikel membincangkan amalan terbaik untuk memastikan keserasian silang pelayar HTML5, memberi tumpuan kepada pengesanan ciri, peningkatan progresif, dan kaedah ujian.

Artikel ini membincangkan html & lt; datalist & gt; elemen, yang meningkatkan bentuk dengan menyediakan cadangan autokomplete, meningkatkan pengalaman pengguna dan mengurangkan kesilapan. Kira -kira: 159

Artikel ini membincangkan html & lt; kemajuan & gt; elemen, tujuan, gaya, dan perbezaan dari & lt; meter & gt; elemen. Tumpuan utama adalah menggunakan & lt; kemajuan & gt; untuk menyelesaikan tugas dan & lt; meter & gt; untuk stati

Artikel ini membincangkan html & lt; meter & gt; elemen, digunakan untuk memaparkan nilai skalar atau pecahan dalam julat, dan aplikasi umum dalam pembangunan web. Ia membezakan & lt; meter & gt; dari & lt; kemajuan & gt; dan Ex

Artikel ini menerangkan html5 & lt; time & gt; elemen untuk perwakilan tarikh/masa semantik. Ia menekankan pentingnya atribut DateTime untuk pembacaan mesin (format ISO 8601) bersama teks yang boleh dibaca manusia, meningkatkan aksesibilit
