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