node寫一個小腳本,批量將stylus文件編譯成css文件

1.首先須要讀取文件,因此須要引入node中的文件系統

fs.readdir(dir, function(err, files) {});讀取一個文件夾,dir:文件夾名,callback參數files:返回dir下全部的文件名
fs.statSync(path).isDirectory();判斷一個目錄是否問一個文件夾css

const fs = require('fs');

2.新建一個子進程利用child_process模塊

3.將stylus文件實時編譯成css文件的命令是

stylus -w styl -o css

將styl文件夾的.styl文件編譯到css文件夾下node

4.文件夾目錄結構圖片描述

具體實現的代碼shell

const fs = require('fs')
const { exec }  = require('child_process') // 建立子進程的方法
// 其中最原始的建立方法是spawn,exec,execFile,fork都是對spawan不一樣程度的封裝

// exec的實現原理是啓動了一個系統shell來解析參數,通俗解釋,用cmd來運行一段命令?它還有一個回調函數
function readFile(dir, callback) {
    callback(dir);
    fs.readdir(dir, (err, files) => {
      if (files && files.length) {
        files.forEach(file => {
          var arr = file.split('.');
          arr.pop();
          var path = dir + '/' + file;
          if (fs.statSync(path).isDirectory()) { 
            readFile(path, callback);
          }
        })
      }
    })
}


readFile('styl', function(dir) {
    var ls = exec(`stylus -w ${dir.replace('styl', './styl')} -o ${dir.replace('styl', './css')}`, (err, stdout, stderr) => {
      if (err) {
        console.log(`error: ${err}`);
      }   
    })
    ls.stdout.on("data", (data) => {
      console.log(`stdout: ${data}`);
    })
    ls.stderr.on("data", (data) => {
      console.log(`stderr: ${data}`);
    })
    ls.on("close", (code) => {
      console.log(`子進程退出: ${code}`);
    })
})
相關文章
相關標籤/搜索