Is there a better way to structure my NPM scripts so that they are more readable?

I began to rely on NPM scripts as the primary tool for my testing process.

As I wrote more NPM scripts, the order and structure is becoming increasingly difficult to read at a glance.

Here's what my current scenarios look like:

{ "scripts": { "clean": "rm -rf report/*", "report": "rm -rf report/; mkdir report", "tests:mocha": "mocha test/spec/", "all-tests:mocha": "npm run tests:mocha -- --recursive", "all-tests:json": "npm run all-tests:mocha -- --reporter json", "all-tests:jsonReport": "npm run all-tests:json > report/all-tests.json", "all-admin:mocha": "mocha test/spec/admin.production.io/", "all-admin-all:mocha": "npm run all-admin:mocha -- --recursive", "all-admin:json": "npm run all-admin:mocha -- --reporter json", "all-admin:jsonReport": "npm run all-admin:json > report/all-tests.json", "google:mocha": "mocha test/spec/googleTest.js", "google:spec": "npm run google:mocha -- --reporter spec --slow 0", "google:json": "npm run google:mocha -- --reporter json", "google:jsonReport": "npm run google:json > report/google-test.json", "usersAll:mocha": "mocha test/spec/admin.production.io/dashboard/users/*.js", "usersAll:spec": "npm run usersAll:mocha -- --reporter spec --slow 0", "usersAll:json": "npm run usersAll:mocha -- --reporter json", "usersAll:jsonReport": "npm run usersAll:jsonReport > report/admin-users-dashboard-all.json", "orgsAll:mocha": "mocha test/spec/admin.production.io/dashboard/organizations/*.js", "orgsAll:spec": "npm run orgsAll:mocha -- --reporter spec --slow 0", "orgsAll:json": "npm run orgsAll:mocha -- --reporter json", "orgsAll:jsonReport": "npm run orgsAll:json > report/admin-orgs-dashboard-all.json", "users-orgs:mocha": "npm run users:spec; npm run orgs:spec", "users-orgs-report": "npm run users:jsonReport; npm run orgs:jsonReport", "pos-users:mocha": "mocha test/spec/admin.production.io/dashboard/users/positiveUserTest.js", "pos-users:spec": "npm run pos-users:mocha -- --reporter spec --slow 0", "pos-users:json": "npm run pos-users:mocha -- --reporter json", "pos-users:jsonReport": "npm run pos-users:json > report/admin-users-dashboard-positive.json", "pos-orgs:mocha": "mocha test/spec/admin.production.io/dashboard/organizations/positiveOrgsTests.js", "pos-orgs:spec": "npm run pos-orgs:mocha -- --reporter spec --slow 0", "pos-orgs:json": "npm run pos-orgs:mocha -- --reporter json", "pos-orgs:jsonReport": "npm run pos-orgs:json > report/admin-users-dashboard-positive.json", "alice-la:mocha": "mocha test/spec/admin.local.us/dashboard/alice/*.js", "alice-la:jsonReport": "npm run alice-la:mocha -- --reporter json -- > report/local-admin-dashboard-alice-all-tests.json", "a2361p-l:mocha": "mocha test/spec/admin.local.us/dashboard/alice/2361-p.js", "a2361p-l:spec": "npm run a2361p-l:mocha -- --reporter spec --slow 0", "a2361p-l:json": "npm run a2361p-l:mocha -- --reporter json", "a2361p-l:jsonReport": "npm run a2361p-l:json > report/a2361p-l.json", "a2361pf-l:mocha": "mocha test/spec/admin.local.us/dashboard/alice/2361-pf.js", "a2361pf-l:spec": "npm run a2361pf-l:mocha -- --reporter spec --slow 0", "a2361pf-l:json": "npm run a2361pf-l:mocha -- --reporter json", "a2361pf-l:jsonReport": "npm run a2361pf-l:json > report/a2361pf-l.json", "alice-pa:mocha": "mocha test/spec/admin.production.io/dashboard/alice/*.js", "alice-pa:jsonReport": "npm run alice-pa:mocha -- --reporter json -- > report/production-admin-dashboard-alice-all-tests.json", "a2361p-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-p.js", "a2361p-p:spec": "npm run a2361p-p:mocha -- --reporter spec --slow 0", "a2361p-p:json": "npm run a2361p-p:mocha -- --reporter json", "a2361p-p:jsonReport": "npm run a2361p-p:json > report/a2361p-p.json", "a2361pf-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-pf.js", "a2361pf-p:spec": "npm run a2361pf-p:mocha -- --reporter spec --slow 0", "a2361pf-p:json": "npm run a2361pf-p:mocha -- --reporter json", "a2361pf-p:jsonReport": "npm run a2361pf-p:json > report/a2361pf-p.json", "a2361:all": "npm run clean; npm run a2361p-l:mocha; npm run a2361p-l:spec; npm run a2361p-l:json; npm run a2361p-l:jsonReport; npm run a2361pf-l:mocha; npm run a2361pf-l:spec; npm run a2361pf-l:json; npm run a2361pf-l:jsonReport; npm run a2361p-p:mocha; npm run a2361p-p:spec; npm run a2361p-p:json; npm run a2361p-p:jsonReport; npm run a2361pf-p:mocha; npm run a2361pf-p:spec; npm run a2361pf-p:json; npm run a2361pf-p:jsonReport", "test": "mocha" } 

These are just about 8 tests. I plan to write scripts for outputting reports in junit formats, and this is already starting to look like eye strain.

How can I structure my npm scripts to be more readable?

+5
source share
3 answers

edit: select this as the best answer until another solution is published.

As a cheap trick, I made empty test scripts to act as a header, but simply backtracked from the corresponding scripts. The method is not quite sufficient, but it is better than the absence of digressions.

Warning Running empty scripts will lead to errors.

 { "utils": "", "clean": "rm -rf report/*; rm -rf *.xml", "report": "rm -rf report/; mkdir report", "all-tests": "", "tests:mocha": "mocha test/spec/", "at:mocha": "npm run tests:mocha -- --recursive", "at:junit": "npm run at:mocha -- --reporter mocha-junit-reporter", "at:jReport": "MOCHA_FILE=./report/all-tests.xml npm run at:junit", "all-prod-admin-tests": "", "prod-tests:mocha": "mocha test/spec/admin.production.io/", "apa:mocha": "npm run -prod-tests:mocha -- --recursive", "apa:junit": "npm run apa:mocha -- --reporter mocha-junit-reporter", "apa:jReport": "MOCHA_FILE=./report/all-prod-admin-tests.xml npm run apa:junit", "all-local-admin-tests": "", "local-tests:mocha": "mocha test/spec/admin.pclocal.us/", "ala:mocha": "npm run -prod-tests:mocha -- --recursive", "ala:junit": "npm run ala:mocha -- --reporter mocha-junit-reporter", "ala:jReport": "MOCHA_FILE=./report/all-local-admin-tests.xml npm run ala:junit", "google-example": "", "google:mocha": "mocha test/spec/googleTest.js", "google:spec": "npm run google:mocha -- --reporter spec --slow 0", "google:junit": "npm run google:mocha -- --reporter mocha-junit-reporter", "google:jReport": "MOCHA_FILE=./report/google.xml npm run google:junit", "alice-local-admin-dashboard-tests": "", "alda:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/*.js", "alda:junit": "npm run alda:mocha -- --reporter mocha-junit-reporter", "alda:jReport": "MOCHA_FILE=./report/alice-local-admin-dashboard-tests-all.xml npm run alda:junit", "2361-automated-test": "", "local-admin-pass": "", "a2361p-l:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/2361-p.js", "a2361p-l:spec": "npm run a2361p-l:mocha -- --reporter spec --slow 0", "a2361p-l:junit": "npm run a2361p-l:mocha -- --reporter mocha-junit-reporter", "a2361p-l:jReport": "MOCHA_FILE=./report/2361-local-pass.xml npm run a2361p-l:junit", "local-admin-pass-fail": "", "a2361pf-l:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/2361-pf.js", "a2361pf-l:spec": "npm run a2361pf-l:mocha -- --reporter spec --slow 0", "a2361pf-l:junit": "npm run a2361pf-l:mocha -- --reporter mocha-junit-reporter", "a2361pf-l:jReport": "MOCHA_FILE=./report/2361-local-pass-fail.xml npm run a2361pf-l:junit", "alice-production-admin-dashboard-tests": "", "apda:mocha": "mocha test/spec/admin.production.io/dashboard/alice/*.js", "apda:junit": "npm run apda:mocha -- --reporter mocha-junit-reporter", "apda:jReport": "MOCHA_FILE=./report/alice-production-admin-dashboard-tests-all.xml npm run apda:junit", "2361-automated-test": "", "prod-admin-pass": "", "a2361p-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-p.js", "a2361p-p:spec": "npm run a2361p-p:mocha -- --reporter spec --slow 0", "a2361p-p:junit": "npm run a2361p-p:mocha -- --reporter mocha-junit-reporter", "a2361p-p:jReport": "MOCHA_FILE=./report/2361-prod-pass.xml npm run a2361p-p:junit", "prod-admin-pass-fail": "", "a2361pf-p:mocha": "mocha test/spec/admin.production.io/dashboard/alice/2361-pf.js", "a2361pf-p:spec": "npm run a2361pf-p:mocha -- --reporter spec --slow 0", "a2361pf-p:junit": "npm run a2361pf-p:mocha -- --reporter mocha-junit-reporter", "a2361pf-p:jReport": "MOCHA_FILE=./report/2361-prod-pass-fail.xml npm run a2361pf-p:junit", "test": "mocha" } 
+2
source

To clear file paths for mocha tests, you can move them to opts files.

So, "alda:mocha": "mocha test/spec/admin.pclocal.us/dashboard/alice/*.js", could be "alda:mocha": "mocha --opts mocha_opts/alda where the opts file is named alda contains:

 test/spec/admin.pclocal.us/dashboard/alice/*.js --recursive 

Of course, the mocha_opts and opts file names will be what you want.

Also, -R is a shorthand for --reporter if that helps

opts files can be overridden by command line arguments, so you can reuse them.

I use the Babel bundle and now I have my db, client and api server in the same project. Things got a little out of control. Along with some shell / node opts scripts opts helped me.

 "scripts": { "test": "npm run client:test && npm run api:test", "knex": "babel-node node_modules/.bin/knex --cwd db", "api:test": "mocha --opts api/__dev__/mocha.unit", "api:cover": "api/__dev__/api-cover.sh", "api:tdd": "npm run -s db:cycle && npm run -s api:test -- -w -R min", "api:start": "babel-node api/server", "api:watch": "nodemon --exec npm run -s api:start", "client:test": "mocha --opts client/__dev__/mocha.unit", "client:tdd": "npm run -s client:test -- -w -R min", "client:cover": "client/__dev__/client-cover.sh", "client:build": "babel-node scripts/client-build.js", "client:watch": "npm run -s client:build -- --watch", "db:make": "npm run knex migrate:make", "db:latest": "npm run -s knex migrate:latest", "db:rollback": "npm run -s knex migrate:rollback", "db:cycle": "npm run -s db:rollback && npm run -s db:latest" } 
+1
source

Let's admit that json files are not a good place to store build tasks (no comments, no variables), and package.json is already especially cluttered.

gulp-shelter can be a good way to streamline your build scripts if bash and make training is not an option for you, your team, or external contributors. It allows you to store build tasks in a JS file and combines all the advantages of NPM and gulpfiles scripts: brevity and reusability.

Here's how it will simplify your tasks:

 const gulp = require('gulp'); const shelter = require('gulp-shelter')(gulp); const testDir = 'test/spec/'; const clean = `rm -rf report/*`; const report = `${clean}; mkdir report`; const testsMocha = `mocha ${testDir}`; const allTestsMocha = `${testsMocha} --recursive`; const allTestsJson = `${allTestsMocha} --reporter json`; const allTestsJsonReport = `${allTestsJson} > report/all-tests`; ... shelter({ 'clean': clean, 'report': report, 'all-tests:mocha': allTestsMocha, 'all-tests:json': allTestsJson, 'all-tests:jsonReport': allTestsJsonReport, ... }); 
0
source

Source: https://habr.com/ru/post/1237790/


All Articles