2014年6月28日 星期六

nodejs auto less to css

nodejs可以配置模組使web環境在http連線近來時會將less編譯成css。

要達到此功能需要

  • less        (編譯核心,能在command line中下命令將less檔轉為css檔)
  • less-middleware  (此middleware提供自動轉譯功能)



example  use eclipse :

Eclipse 需要安裝nodejs plugin才能開發nodejs專案,沒有的話要使用command line來建立專案。

eclipse install nodejs plugin  please reference  here

Step1. Create nodejs express project (建立nodejs express專案)

  • File > New > Node.js Express Project 



Step2. Enter Project Name & Choose Template Engine 、StyleSheet Engin
  • Project Name Enter your Project name.  (輸入你想要的名稱)
  • Template Engin Choose ejs.             (選擇ejs樣板引擎)
  • StyleSheet Engin Choose less.          (選擇less樣式引擎)




Step3. Edit package.json   (編輯package.json檔)


{

  "name": "lessTest",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "3.2.6",
    "ejs": "*",
    "less-middleware": "*"
  }
}

note: 以上"*"可自行指定版本號。

Step4. Edit app.js add following code (編輯app.js並加入以下程式碼片段)

//note:目前撰寫時的less-middleware是1.0.3,新版本與過去的版本用法會有不同


/* old version less-middleware  這是舊版 less-middleware  0.1.x

app.use(require('less-middleware')({
src:path.join(__dirname, '/public'),
compress:true
}));
*/

//這是1.0.x
app.use(require('less-middleware')(path.join(__dirname, '/public')));



Step5. Create style.less file (建立less檔)
  • \public\stylesheets\style.less

body {
  padding: 50px;
  font: 50px "Lucida Grande", Helvetica, Arial, sans-serif;
}

a {
  color: #0AB7FF;
}


Step6. Run npm install   (安裝使用到的模組)
  • package.json > click right mouse button > Run As > npm install
    Note:eclipse 會幫你檢查package使用到的套件幫你執行 npm install。
   
Step7. Run app.js   (執行app.js)
  • app.js > click right mouse button > Run As > Node Application
Step8. Use Browser open url  (用瀏覽器開啟頁面)
  • http://localhost:3000/

Step9. Open style.css

打開style.css可看見已將less內容轉譯成css並且壓縮過內容

body{padding:50px;font:12px "Lucida Grande",Helvetica,Arial,sans-serif}a{color:#00B7FF}



Note:在nodejs中改變內容需要停止node.js在重新啟動方能載入改變內容,nodejs是為了效能如此設計,
但若想在開發過程中方便除錯,則可在package中加入supervisor項目後,在執行nam install。

Note:在eclipse node.js project中按下F5重整後,即可看到eclipse 對package.json執行npm install後所產生的模組資料夾,node會在此資料夾中找尋模組,若不想使用刪除掉模組與其package.json項目即可。



最後結果:

package.json

{
  "name": "lessTest",
  "version": "0.0.1",
  "private": true,
  "scripts": {
    "start": "node app.js"
  },
  "dependencies": {
    "express": "3.2.6",
    "ejs": "*",
    "less-middleware": "*",
    "supervisor":"*"
  }
}

app.js




/**
 * Module dependencies.
 */

var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , path = require('path');

var app = express();

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(app.router);

/* old version less-middleware
app.use(require('less-middleware')({
src:path.join(__dirname, '/public'),
compress:true
}));
*/
app.use(require('less-middleware')(path.join(__dirname, '/public')));

app.use(express.static(path.join(__dirname, 'public')));

// development only
if ('development' == app.get('env')) {
  app.use(express.errorHandler());
}

app.get('/', routes.index);
app.get('/users', user.list);

http.createServer(app).listen(app.get('port'), function(){
  console.log('Express server listening on port ' + app.get('port'));
});


style.less


body {

  padding: 50px;
  font: 12px "Lucida Grande", Helvetica, Arial, sans-serif;
}

a {
  color: #00B7FF;
}

style.css
body{padding:50px;font:12px "Lucida Grande",Helvetica,Arial,sans-serif}a{color:#00B7FF}


npm 操作命令
移除node 模組
npm uninstall [模組名稱] -g

查詢node 模組
npm ls

查詢node 全域模組
npm ls -g

更新node 模組
$ npm update [模組名稱]

更新node 全域模組
$ npm update [模組名稱] -g

沒有留言:

張貼留言