You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

111 lines
4.0 KiB

var fs = require('fs'),
path = require('path'),
exec = require('child_process').exec,
less = require('less'),
sourcePath, targetPath;
// sourcePath = 'src/styles.less';
// targetPath = 'src/css/';
sourcePath = 'src/app/theme'; // less檔來源路徑
targetPath = 'src/assets/themes'; // 轉換為css後存檔路徑
cssPath = 'assets/themes'; // 專案存取css路徑
//自訂路徑:获取命令行中的路径
process.argv.forEach(function (val, index, array) {
console.log(val);
if (index == 2) {
sourcePath = val;
}
if (index == 3) {
targetPath = val;
}
if (index == 4) {
cssPath = val;
}
})
var lessc = function (rootPath, targetPath, cssPath) {
//**簡易測試寫法 */
// //判断文件是否为less文件
// if (path.extname(rootPath) === ".less") {
// var currentFilePath = path.resolve(rootPath);
// var newFilePath = path.resolve(targetPath, path.basename(currentFilePath, '.less') + ".css");
// if (!fs.existsSync(targetPath)) {
// fs.mkdirSync(targetPath);
// }
// // 方法一:用less render
// less.render(fs.readFileSync(currentFilePath).toString(), {
// filename: path.resolve(currentFilePath),
// }, function (e, output) {
// if (e) {
// console.log(e);
// }
// fs.writeFileSync(newFilePath, output.css);
// });
// ////方法二:使用命令列lessc,但錯誤訊息不知如何列出
// // exec("lessc -x" + currentFilePath + " > " + newFilePath);
// }
//**簡易測試寫法END */
//取得当前绝对路径
rootPath = path.resolve(rootPath);
//目标路径绝对路径
targetPath = path.resolve(targetPath);
//判断目录是否存在
fs.exists(rootPath, function (exists) {
//路径存在
if (exists) {
var jsonArr=[];
//获取当前路径下的所有文件和路径名
var childArray = fs.readdirSync(rootPath);
if (childArray.length) {
var id = '';
var themePath = '';
var jsonFilePath = path.resolve(targetPath, "themeJson.json");
for (var i = 0; i < childArray.length; i++) {
var currentFilePath = path.resolve(rootPath, childArray[i]);
var currentTargetPath = path.resolve(targetPath, childArray[i])
//读取文件信息
var stats = fs.statSync(currentFilePath);
//若是目录则递归调用
if (stats.isDirectory()) {
//lessc(currentFilePath, currentTargetPath);
} else {
//判断文件是否为less文件
if (path.extname(currentFilePath) === ".less") {
var newFilePath = path.resolve(targetPath, path.basename(currentFilePath, '.less') + ".css");
id = path.basename(currentFilePath, '.less');
themePath = cssPath + '/' + id + '.css';
if (!fs.existsSync(targetPath)) {
fs.mkdirSync(targetPath);
}
// 方法一:用less render
(function(currentFilePath, newFilePath, id, themePath) {
less.render(fs.readFileSync(currentFilePath).toString(), {
filename: path.resolve(currentFilePath),
javascriptEnabled: true
}, function (e, output) {
if (e) {
console.log(e); // 錯誤訊息
}
console.log(newFilePath);
jsonArr.push({"id":id, "path":themePath});
fs.writeFileSync(newFilePath, output.css); // 寫入css
fs.writeFileSync(jsonFilePath,JSON.stringify(jsonArr)); // 產生css名稱及路徑
});
})(currentFilePath, newFilePath, id, themePath);
////方法二:使用命令列lessc,但錯誤訊息不知如何列出
// exec("lessc -x " + currentFilePath + " > " + newFilePath);
}
}
}
}
} else {
console.log("directory is not exists");
}
});
}
lessc(sourcePath, targetPath, cssPath);