diff --git a/package.json b/package.json index bb53dd8..040a758 100644 --- a/package.json +++ b/package.json @@ -2,17 +2,18 @@ "dependencies": { "chalk": "^4.1.1", "chokidar": "^3.5.2", + "commander": "^8.1.0", "fs-extra": "^10.0.0", "minify": "^7.0.2", "prettier": "^2.3.2", "sass": "^1.36.0" }, "scripts": { - "dev": "node src/builder/watch ", + "dev": "node src/builder/watch", "build": "node src/builder", "prettify": "prettier --write src" }, "devDependencies": { "nodemon": "^2.0.12" } -} \ No newline at end of file +} diff --git a/src/builder/builders.js b/src/builder/builders.js index 80dc809..b1b6ddb 100644 --- a/src/builder/builders.js +++ b/src/builder/builders.js @@ -61,7 +61,7 @@ const fileBuilder = async (file, outPath, fileType) => { const path = file.split('/'); const fileName = path[path.length - 1]; - const withPaths = replacePaths(compiled); + const withPaths = replaceFileContents(compiled); await fs.ensureDir(outPath); @@ -101,7 +101,7 @@ const compile = async (file, fileType) => { * @param {string} data - The data that needs its paths replaced * @returns */ -const replacePaths = (data) => { +const replaceFileContents = (data) => { if (config.paths) { Object.keys(config.paths).forEach((key) => { data = data.replace(new RegExp(key, 'g'), '/' + config.paths[key]); @@ -111,6 +111,10 @@ const replacePaths = (data) => { data = data.replace(new RegExp(sassExtension, 'g'), '.min.css'); + if (process.env.TARGET_BROWSER != 'chrome') { + data = data.replace(new RegExp('chrome.', 'g'), 'browser.') + } + return data; }; diff --git a/src/builder/index.js b/src/builder/index.js index 3767e2a..3e262aa 100644 --- a/src/builder/index.js +++ b/src/builder/index.js @@ -1,13 +1,32 @@ const { join } = require('path'); -const fs = require('fs-extra'); + +const { program } = require('commander'); const config = require(join(process.cwd(), 'builder.config.js')); +const validBrowsers = ['chrome', 'firefox', 'edge'] + const srcDir = join(process.cwd(), config.root); const distDir = join(process.cwd(), config.out); const { builder } = require('./builders'); +program + .option(`-t, --target <${validBrowsers.join(' | ')}>`, 'set the target browser') + +program.parse(process.argv); + +const options = program.opts(); + +const target = options.target.toLowerCase() || 'chrome' + +if (!validBrowsers.includes(target)) { + console.log('Error: invalid target browser, please specify one of the following: ' + validBrowsers.join(', ')); + process.exit(); +} + +process.env.TARGET_BROWSER = target; + if (config.interpreter) { config.interpreter.forEach((interpreter) => { const input = join(srcDir, interpreter.input); diff --git a/yarn.lock b/yarn.lock index 78278a2..d69c998 100644 --- a/yarn.lock +++ b/yarn.lock @@ -205,6 +205,11 @@ commander@^4.1.1: resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== +commander@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.1.0.tgz#db36e3e66edf24ff591d639862c6ab2c52664362" + integrity sha512-mf45ldcuHSYShkplHHGKWb4TrmwQadxOn7v4WuhDJy0ZVoY5JFajaRDKD0PNe5qXzBX0rhovjTnP6Kz9LETcuA== + concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"