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);
|