nodejs編譯sass模塊包 node-compass,與gulp包gulp-sass使用方法


簡介:node express或者就是node項目中,要自動編譯sass方法很多,比如gulp 比如考拉,比如今天我想說的這個包node-compass。

編譯sass的三種方法:

前提條件: 都需要電腦中安裝好ruby和compass.

方法一: 命令行編譯sass:

1 compass compile

回車確認即可生成對應的css代碼。新生成的css文件與sass文件在同一目錄下。這是最基礎的sass編譯方法。

方法二:gulp-sass

(一).前提條件:

電腦中安裝有ruby,compass;

項目中已經安裝與配置好基本的gulp(配置與安裝本文不介紹。gulp基本用法也不介紹,不會的先去學gulp基礎)

(二).下載gulp-sass包:

npm install gulp-sass --save-dev

 

(三).基礎用法:

在你的gulpfile.js中加入以下代碼:

 1 var gulp = require('gulp');
 2 var sass = require('gulp-sass');
 3 
 4 gulp.task("sass", function() {
 5     return gulp.src("test/*.scss")
 6         .pipe(sass().on("error", sass.logError))
 7         .pipe(gulp.dest("public/css"));
 8 });
 9 
10 gulp.task('watch', function () {
11     gulp.watch("test/*.scss", ["sass"]);
12 });

  ------------------------------------------------------------------------------------------

解釋:頭兩句引入模塊,沒啥可說的。

第5句:gulp.src() 里面參數為你的sass文件路徑,比如"test/a.scss"--表示自動編譯test文件夾下的a.scss。如果需要編譯該文件夾下的所有scss文件,則用*表示所有:test/*.scss.

第6句: 照着寫。具體參數解釋我也不曉得,readme里沒寫,我暫時也不想去找是啥意思。

第7句: gulp.dest()中的參數為編譯好的css文件所在的文件夾,不需要具體指定到文件名。因為gulp會自動生成一個與對應sass同名的css放在這個文件夾中,所以也不需要你事先手工創建css文件。

第10~12句: 我們當然要用watch來監視所有改動的sass文件。[watch不會用的,先去看看gulp基礎吧]。watch()的第一個參數,放入所有需要被監視的sass,一般來說,與第5句的參數一樣

------------------------------------------------------------------------------------

 (四).啟動gulp 監視:

項目根目錄下命令行: 

1 gulp watch

啟動成功后,命令行中會顯示如下信息:

 

然后,我在test文件夾中新建一個a.scss。並寫入如下代碼:

a.scss

1 div{
2   background:red;
3   span{
4     color:green;
5   }
6 }

同步的,gulp自動在public/css文件下新建一個a.css並生成對應的css代碼。

 

(五).其他:

gulp-sass的readme中還有這么一句:

You can also compile synchronously, doing something like this:

你也可以同步編譯,如下做:

 1 ```javascript
 2 'use strict';
 3 
 4 var gulp = require('gulp');
 5 var sass = require('gulp-sass');
 6 
 7 gulp.task('sass', function () {
 8   return gulp.src('./sass/**/*.scss')
 9     .pipe(sass.sync().on('error', sass.logError))
10     .pipe(gulp.dest('./css'));
11 });
12 
13 gulp.task('sass:watch', function () {
14   gulp.watch('./sass/**/*.scss', ['sass']);
15 });

無非就是把之前的sass().on()變成了sass.sync().on;然而依舊需要打開gulp watch才能自動編譯。

我並沒有發現2種寫法在node express項目中的區別。。。。所以問題暫留,反正我目前的express網站都是用的第一種寫法,gulp watch之后,都是同步編譯sass。

方法三:node-compass

下文例子,皆為express generator 生成的express項目作為示范,可能由於版本不同,部分代碼有所出入。若有不同自行參考修改。

(一).前提條件:

電腦中安裝有ruby,compass;

如果沒有,可以通過如下命令安裝:

1 $ gem update --system
2 $ gem install compass

(二).下載node-compass包:

1     npm install node-compass

(三).用法:

官方readme寫的最簡單的用法是:

1 var compass = require('node-compass');
2 app.configure(function() {
3     app.use(compass());
4 });

 

這里,我用webstorm 創建了一個新node express項目,使用express generator生成的項目,並且在最初就設置了css 為compass,所以自動在app.js中生成了相關代碼:

1 app.use(require('node-compass')({mode: 'expanded'}));

 

 

(四).配置

默認:

node-compass需要你的資源文件夾名為“public”,你的所有 `*.scss` 和 `*.css` 文件都需要位於  '/public/stylesheets/'.中。

其實,我們只需要創建sass文件就夠了,會自動創建同名css的。

例如這個項目結構:我手工創建了style.scss文件,項目將會自動生成了style.css:(注意這里,我說的是‘將會’

需要注意的是:不同於gulp的那種同步編譯。雖然會自動生成和編譯對應的css文件,但我們需要先正常的啟動express項目,然后去瀏覽器里運行一次項目,項目中才會自動生成和編譯對應css文件。

 

如何自定義設置資源文件夾?

可以通過給中間件傳入一組設置信息的數據,改變根資源文件夾。

1 compass({
2     project: path.join(__dirname, 'myAssets')
3 });

 

由於例子項目是通過express generator創建的,故參照上述代碼新增app.js中的如下代碼(黃色部分)(你的項目結構和express generator版本可能和我不同,所以僅作為參考):

1 app.use(require('node-compass')({
2     project: path.join(__dirname, 'myAssets'), 3     mode: 'expanded'
4 }));

 

再在項目根目錄下新建文件夾myAssets,再在其中新建文件夾stylesheets,里面新建一個s1.scss文件。重啟一下express項目,瀏覽器里刷新一道。現在stylesheets中已經自動新建了s1.css。

這樣,我就能自動編譯myAssets/stylesheets文件夾下的所有scss文件了。

例子:

 

需要注意的是:本例中,自定義設置了根資源文件夾為myAssets,它里面還需要新建一個名為stylesheets文件夾(至於為何要新建stylesheets文件夾,請看下面的參數解釋,不想看就記住必須要有stylesheets就夠了),里面存放我們自己的scss文件。如果放在外面,是不會被自動編譯的。我這里新建的s0.scss(直接放在myAssets之下)就沒有被自動編譯成css。

(四-1).配置選項

 mode:

默認:compress

描述:你希望使用的輸出模式

值:expanded | nested | compressed | compact

 

 comments:

默認:false

描述:是否顯示line comments

 

relative:

默認:true

描述:Are assets relative

 

 css:

默認:stylesheets

描述:輸出css到項目中的哪個文件夾

 

 sass:

默認:stylesheets

描述:sass文件所在的文件夾

 

 project:

默認:public

描述:你所有的資源存放的位置

 

 cache:

默認:true

描述:允許/禁止 緩存

 

 logging:

默認:false

描述:允許/禁止 控制台打印編譯sass的信息。

例如:

 app.js(新增: 黃色部分。刪除:無。其他修改:無)

1 app.use(require('node-compass')({
2     project: path.join(__dirname, 'myAssets'),
3     mode: 'expanded',
4     logging: true
5 }));

 

設為true后,你會在控制台看到如下信息:

 

 config_file:

默認:false

描述:使用有效的config.rb文件,來配置compass設置。

 

全文結束。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM