node写一个小脚本,批量将stylus文件编译成css文件

26次阅读

共计 1058 个字符,预计需要花费 3 分钟才能阅读完成。

1. 首先需要读取文件, 所以需要引入 node 中的文件系统
fs.readdir(dir, function(err, files) {}); 读取一个文件夹,dir: 文件夹名,callback 参数 files: 返回 dir 下所有的文件名 fs.statSync(path).isDirectory(); 判断一个目录是否问一个文件夹
const fs = require(‘fs’);
2. 新建一个子进程利用 child_process 模块
3. 将 stylus 文件实时编译成 css 文件的命令是
stylus -w styl -o css
将 styl 文件夹的.styl 文件编译到 css 文件夹下
4. 文件夹目录结构

具体实现的代码
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}`);
})
})

正文完
 0