diff --git a/.gitignore b/.gitignore index 68c2f30..8ea1ff4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ # Ignore npm modules and src folder node_modules src -tsconfig.json \ No newline at end of file +tsconfig.json +test \ No newline at end of file diff --git a/README.md b/README.md index 6e00842..665c177 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,8 @@ Or you can just watch an entire folder. In this case less-watch will searc for a npx lessc-watcher --src ./folder --dst ./dist/less.css ``` +**_NOTE:_** If you only provide a destination path, without specifying the exact file name in `.css`, your files will be compiled to a css file named `_main.css`. This is done to prevent conflicts with another possible `main.css` file. + #### Adding more source folders You can add more source folders by using a comma(`,`) separator. Example: diff --git a/dist/index.js b/dist/index.js index 96b19a7..a930554 100644 --- a/dist/index.js +++ b/dist/index.js @@ -8,40 +8,51 @@ const fs_1 = __importDefault(require("fs")); const child_process_1 = require("child_process"); const sourceFile = process.argv.indexOf("--src") >= 0 ? process.argv[process.argv.indexOf("--src") + 1] : null; const destinationFile = process.argv.indexOf("--dst") >= 0 ? process.argv[process.argv.indexOf("--dst") + 1] : null; -console.log("Running Less compiler ..."); +console.log("\x1b[44mRunning Less compiler\x1b[0m ..."); if (!sourceFile || !destinationFile) { console.log("ERROR => Missing source or destination file"); - process.exit(1); + process.exit(); } const sourceFiles = sourceFile.split(","); const dstFiles = destinationFile.split(","); for (let i = 0; i < sourceFiles.length; i++) { const srcFolder = sourceFiles[i]; const dstFile = dstFiles[i]; + if ((srcFolder === null || srcFolder === void 0 ? void 0 : srcFolder.match(/\..{2,4}$/)) && !(srcFolder === null || srcFolder === void 0 ? void 0 : srcFolder.match(/\.less$/))) { + console.log("\x1b[33mERROR:\x1b[0m Source must be a folder or a .less file"); + process.exit(); + } + compile(srcFolder, dstFile, null); fs_1.default.watch(srcFolder, { recursive: true }, (evtType, fileName) => { - if ((fileName === null || fileName === void 0 ? void 0 : fileName.match(/\(/)) || (fileName === null || fileName === void 0 ? void 0 : fileName.match(/\.js$/i))) { + if (!fileName) return; - } - let finalSrcPath = `${srcFolder}/main.less`; - let finalDstPath = dstFile; - if (fileName === null || fileName === void 0 ? void 0 : fileName.match(/\[/)) { - const paths = fileName.split("/"); - const targetPathFull = paths[paths.length - 1]; - const targetPath = targetPathFull.replace(/\[|\]/g, "").replace(/\.less/, ""); - const destinationFileParentFolder = dstFile.replace(/\/[^\/]+\.css$/, ""); - const targetDstFilePath = `${destinationFileParentFolder}/${targetPath}.css`; - finalSrcPath = `${srcFolder}/${targetPathFull}`; - finalDstPath = targetDstFilePath; - } - (0, child_process_1.exec)(`lessc ${finalSrcPath} ${(finalDstPath === null || finalDstPath === void 0 ? void 0 : finalDstPath.match(/\.css$/)) ? finalDstPath : finalDstPath.replace(/\/$/, "") + "/_main.css"}`, (error, stdout, stderr) => { - if (error) { - console.log("ERROR =>", error.message); - if (!(evtType === null || evtType === void 0 ? void 0 : evtType.match(/change/i)) && fileName && fileName.match(/\[/)) { - fs_1.default.unlinkSync(finalDstPath); - } - return; - } - console.log("Less Compilation \x1b[32msuccessful\x1b[0m!"); - }); + const filePathRoot = (srcFolder === null || srcFolder === void 0 ? void 0 : srcFolder.match(/\.less$/)) ? srcFolder : srcFolder + "/" + fileName; + compile(filePathRoot, dstFile, evtType); + }); +} +function compile(fileName, dst, evtType) { + if ((fileName === null || fileName === void 0 ? void 0 : fileName.match(/\(/)) || (fileName.match(/\..{2,4}$/) && !(fileName === null || fileName === void 0 ? void 0 : fileName.match(/\.less$/i)))) { + return; + } + let finalSrcPath = (fileName === null || fileName === void 0 ? void 0 : fileName.match(/\.less$/)) ? fileName : `${fileName}/main.less`; + let finalDstPath = dst; + if (fileName === null || fileName === void 0 ? void 0 : fileName.match(/\[/)) { + const paths = fileName.split("/"); + const targetPathFull = paths[paths.length - 1]; + const targetPath = targetPathFull.replace(/\[|\]/g, "").replace(/\.less/, ""); + const destinationFileParentFolder = dst.replace(/\/[^\/]+\.css$/, ""); + const targetDstFilePath = `${destinationFileParentFolder}/${targetPath}.css`; + finalSrcPath = `${fileName}/${targetPathFull}`; + finalDstPath = targetDstFilePath; + } + (0, child_process_1.exec)(`lessc ${finalSrcPath} ${(finalDstPath === null || finalDstPath === void 0 ? void 0 : finalDstPath.match(/\.css$/)) ? finalDstPath : finalDstPath.replace(/\/$/, "") + "/_main.css"}`, (error, stdout, stderr) => { + if (error) { + console.log("ERROR =>", error.message); + if (!(evtType === null || evtType === void 0 ? void 0 : evtType.match(/change/i)) && fileName && fileName.match(/\[/)) { + fs_1.default.unlinkSync(finalDstPath); + } + return; + } + console.log("Less Compilation \x1b[32msuccessful\x1b[0m!"); }); } diff --git a/package.json b/package.json index 0ffabc3..41a07b5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lessc-watcher", - "version": "1.1.0", + "version": "1.1.2", "description": "A minimal package to watch less files and compile them to css", "main": "dist/index.js", "bin": {