diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000..0939206 Binary files /dev/null and b/.DS_Store differ diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b512c09 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/README.md b/README.md index 8fea132..0e18a05 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -Write more about the project +## f-meter +- f-meter is a command line interface which gives project audits and performance +- Internally uses lighthouse +- Providing url of website to f-meter + ![Screenshot](https://i.imgur.com/GxKf0yH.png) + +- It will calculate the values of audits like performance,accessebility etc and compaires it with standard values of web audits .Showing the results of comparison as below : +![Screenshot](https://imgur.com/xrdrOkR.png) +![Screenshot](https://imgur.com/lRYCgm9.png) diff --git a/bin/.DS_Store b/bin/.DS_Store new file mode 100644 index 0000000..32d1532 Binary files /dev/null and b/bin/.DS_Store differ diff --git a/bin/custom.config.js b/bin/custom.config.js new file mode 100644 index 0000000..d98f5e2 --- /dev/null +++ b/bin/custom.config.js @@ -0,0 +1,29 @@ +module.exports = { + extends: 'lighthouse:default', + settings: { + 'onlyCategories': [ + 'performance', + 'accessibility', + 'best-practices', + 'seo', + 'pwa' + ], + 'threshold-scores':{ + 'performance':60, + 'accessibility':50, + 'best-practices':50, + 'seo':60, + 'pwa':50 + } + }, + chromeOptions:{ + headless:true, + sandboxing:false, + showLogStatus:false + }, + urls:[ + 'https://www.twitter.com', + 'https://www.facebook.com', + 'https://www.qed42.com/blog' + ] + } \ No newline at end of file diff --git a/bin/index.js b/bin/index.js new file mode 100755 index 0000000..61ce704 --- /dev/null +++ b/bin/index.js @@ -0,0 +1,94 @@ +#!/usr/bin/env node + +var lighthouse = require('bin/node_modules/lighthouse'); +const chromeLauncher = require('bin/node_modules/chrome-launcher'); +var config = require('../configs/custom.config'); +const Table = require('bin/node_modules/cli-table'); +var clc = require("cli-color"); +let tables=[],chromeFlags=['--disable-gpu']; +let i=0; +let threshold=config.settings["threshold-scores"]; +const program=require('bin/node_modules/commander'); +// var exec=require('child-process').exec; + +// let urls=['https://www.twitter.com','https://www.facebook.com','https://www.qed42.com/careers']; +if(config.chromeOptions.headless){ + chromeFlags.push('--headless'); +} +if(!config.chromeOptions.sandboxing){ + chromeFlags.push('--no-sandbox'); +} +console.log("chrome flag array :",chromeFlags); + +var opts = { + chromeFlags:chromeFlags, + logLevel: config.chromeOptions.showLogStatus ? 'info':'silent', + output:'json' +} + +createTableStructure = () => { + return new Table({ + head: [clc.cyanBright('Categories'), clc.cyanBright('Calculated Audits'), clc.cyanBright('Expected Audits')], + colWidths: [30, 30, 30] + }); + } + + createTableData = (newTable,res) => { + try { + if(res){ + Object.values(res).map(data => { + newTable.push( + [clc.yellowBright(data.id), data.score*100 >= threshold[data.id] ? clc.green(data.score*100) : clc.red(data.score*100), threshold[data.id]] + ) + }) + } + console.log(newTable.toString()); + } catch (err) { + console.log("error in creating table values :", err); + } + } + +async function launcher(url){ + return chromeLauncher.launch(opts).then(chrome => { + opts.port = chrome.port; + console.log("started :",chrome.pid); + return lighthouse(url,opts,config).then(result => { + console.log(`${url} :`,Object.values(result.lhr.categories).map(score => score.score)); + return chrome.kill().then(() => result.lhr.categories); + }) + }); +} + +async function auditUrls(urls){ + for(let url of urls){ + await launcher(url).then(results => { + let table; + table=createTableStructure(); + createTableData(table,results); + tables.push({url:url,table:table}); + }); + } + console.log("\n-------------all audits are-----------------\n"); + if(tables){ + tables.map(data => { + console.log(`${data.url} :`); + console.log(`${data.table.toString()}`); + }); + } +} + +// async function auditUrls(urls){ +// await urls.map(async (url,index) => { +// await launcher(url).then(results => { +// console.log(`${url} : ${results}`); + +// }); +// }) +// } + +auditUrls(config.urls); + + + + + \ No newline at end of file diff --git a/bin/package.json b/bin/package.json new file mode 100644 index 0000000..a0c8941 --- /dev/null +++ b/bin/package.json @@ -0,0 +1,19 @@ +{ + "name": "fmeter-with-travis", + "version": "1.0.0", + "description": "Get project Info though CLI ", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "chrome-launcher": "^0.11.2", + "cli-color": "^1.4.0", + "cli-table": "^0.3.1", + "colors": "^1.3.3", + "core-util-is": "^1.0.2", + "js-yaml": "^3.13.1", + "lighthouse": "^5.2.0" + } +} diff --git a/hi.json b/hi.json new file mode 100644 index 0000000..058d812 --- /dev/null +++ b/hi.json @@ -0,0 +1,23 @@ +{ + "name":"fmeter-cli", + "version":"1.0.0", + "description":"Get project Info though CLI ", + "bin":{ + "fmeter":"index.js" + }, + "scripts":{ + "test":"echo \"Error: no test specified\" && exit 1" + }, + "dependencies":{ + "commander":"^2.20.0", + "fs-extra":"^8.1.0", + "inquirer":"^6.3.1", + "lighthouse":"^5.2.0", + "chrome-launcher":"^0.11.2", + "cli-color":"^1.4.0", + "cli-table":"^0.3.1", + "colors":"^1.3.3", + "core-util-is":"^1.0.2", + "js-yaml":"^3.13.1" + } +} \ No newline at end of file diff --git a/index.js b/index.js new file mode 100755 index 0000000..b77139e --- /dev/null +++ b/index.js @@ -0,0 +1,83 @@ +#!/usr/bin/env node + +var program = require('commander'); +var inquirer = require('inquirer'); +var fs = require('fs-extra'); +var merge = require('merge'),original,cloned; +const dest_curr_dir=process.cwd(); +var src_dir='/usr/local/lib/node_modules/bin'; +let template = { + name: "fmeter-cli", + version: "1.0.0", + description: "Get project Info though CLI ", + bin: { + fmeter: "index.js" + }, + scripts: { + "test": "echo \"Error: no test specified\" && exit 1" + }, +} + +const questions=[ + { type: 'other', name: 'username', message: 'Specify your name :' }, + { type: 'other', name: 'useremail', message: 'Specify your email' }, +]; + +function getFmeterFiles(){ + if (!fs.existsSync('./bin')){ + fs.mkdirSync('./bin'); + fs.copySync(src_dir,`${dest_curr_dir}/bin`); + console.log("copied successfully..."); + return true; + } +} + +async function getUserInfo(){ + return await inquirer + .prompt(questions) + .then(function(ans){ + return ans; + }); +} + +function mergeDependancies(){ + if(fs.exists(`${__dirname}/bin`)){ + let originalFile=JSON.parse(fs.readFileSync('./package.json')); + let bin_jsonFile=JSON.parse(fs.readFileSync('./bin/package.json')); + original=originalFile["dependencies"]; + bin_json=bin_jsonFile["dependencies"]; + // console.log("original :",original["dependencies"]); + // console.log("bin :",bin_json["dependencies"]); + dependencies=merge(original,bin_json); + console.log("dependencies",dependencies); + template={...template,dependencies:dependencies} + console.log(template); + let data=JSON.stringify(template); + fs.unlinkSync('./package.json'); + fs.createFileSync("./package.json"); + fs.writeFileSync('hi.json',data); + console.log("files created successfully."); + }else{ + console.log("first get the fmeter files."); + } +} + +program + .command('init') + .description('configuring fmeter on local') + .action(()=>{ + console.log("-------configuring fmeter----------"); + fs.access(`${__dirname}/bin`,function(err){ + if(!err){ + console.log("File exits"); + return; + } + getUserInfo().then(async res=>{ + console.log("result is :",res); + getFmeterFiles(); + mergeDependancies(); + }) + }) + }) + +program.parse(process.argv); \ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100755 index 0000000..c8d98c9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,302 @@ +{ + "name": "fmeter-cli", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==" + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=" + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "requires": { + "restore-cursor": "^2.0.0" + } + }, + "cli-width": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz", + "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=" + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "commander": { + "version": "2.20.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", + "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==" + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=" + }, + "external-editor": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", + "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "requires": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + } + }, + "figures": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", + "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "requires": { + "escape-string-regexp": "^1.0.5" + } + }, + "fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "dependencies": { + "graceful-fs": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.2.tgz", + "integrity": "sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q==" + } + } + }, + "graceful-fs": { + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "optional": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "inquirer": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", + "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "requires": { + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" + } + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=" + }, + "is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz", + "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=" + }, + "jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", + "requires": { + "graceful-fs": "^4.1.6" + } + }, + "lodash": { + "version": "4.17.11", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz", + "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==" + }, + "merge": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/merge/-/merge-1.2.1.tgz", + "integrity": "sha512-VjFo4P5Whtj4vsLzsYBu5ayHhoHJ0UqNm7ibvShmbmoz7tGi0vXaoJbGdB+GmDMLUdg8DpQXEIeVDAe8MaABvQ==" + }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==" + }, + "mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=" + }, + "onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "requires": { + "mimic-fn": "^1.0.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=" + }, + "restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "requires": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + } + }, + "run-async": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz", + "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", + "requires": { + "is-promise": "^2.1.0" + } + }, + "rxjs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.2.tgz", + "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "requires": { + "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" + } + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=" + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "tslib": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", + "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==" + }, + "universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==" + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..29420e6 --- /dev/null +++ b/package.json @@ -0,0 +1,20 @@ +{ + "name": "fmeter-cli", + "version": "1.0.0", + "description": "Get project Info though CLI ", + "bin": { + "f-meter": "index.js" + }, + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "commander": "^2.20.0", + "fs-extra": "^8.1.0", + "inquirer": "^6.3.1", + "lighthouse": "^5.1.0", + "merge": "^1.2.1" + } +}