{"id":18609728,"url":"https://github.com/unlight/you-dont-need-task-runner","last_synced_at":"2025-10-17T12:22:30.450Z","repository":{"id":138161903,"uuid":"197735876","full_name":"unlight/you-dont-need-task-runner","owner":"unlight","description":"How to manage your workflow in shell without task runner (gulp, grunt, fly, just, etc.)","archived":false,"fork":false,"pushed_at":"2019-07-22T10:14:49.000Z","size":10,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-12-27T01:25:31.346Z","etag":null,"topics":["anti-grunt","anti-gulp","you-dont-need","you-may-not-need","youdontneed"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/unlight.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-07-19T08:38:27.000Z","updated_at":"2024-04-20T14:04:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"9b13b8e0-612c-44aa-9301-4108fede4ed3","html_url":"https://github.com/unlight/you-dont-need-task-runner","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unlight%2Fyou-dont-need-task-runner","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unlight%2Fyou-dont-need-task-runner/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unlight%2Fyou-dont-need-task-runner/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/unlight%2Fyou-dont-need-task-runner/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/unlight","download_url":"https://codeload.github.com/unlight/you-dont-need-task-runner/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":239400596,"owners_count":19632049,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anti-grunt","anti-gulp","you-dont-need","you-may-not-need","youdontneed"],"created_at":"2024-11-07T03:07:05.493Z","updated_at":"2025-10-17T12:22:30.304Z","avatar_url":"https://github.com/unlight.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# You do not (may not) need task runner\n\nHow to manage your workflow in shell without task runner (gulp, grunt, fly, just, etc.)\n\n## Table of Contents\n\n-   [Resources](#resources)\n\n-   [Recipes](#recipes)\n\n    -   [Delete files and folders](#delete-files-and-folders)\n    -   [ESLint](#eslint)\n    -   [ESLint in watch mode](#eslint-in-watch-mode)\n    -   [Parallel Tasks](#parallel-tasks)\n    -   [Compile TypeScript](#compile-typescript)\n    -   [Copy files](#copy-files)\n\n## Resources\n\n-   [Everything awesome related to npm scripts and using npm as a build tool](https://github.com/RyanZim/awesome-npm-scripts)\n-   [Why I Left Gulp and Grunt for npm Scripts](https://medium.com/free-code-camp/why-i-left-gulp-and-grunt-for-npm-scripts-3d6853dd22b8) - Article by Cory House\n-   [Build Automation with Vanilla JavaScript](https://medium.com/@tarkus/build-automation-with-vanilla-javascript-74639ec98bad)\n-   [How to Use npm as a Build Tool](https://www.keithcirkel.co.uk/how-to-use-npm-as-a-build-tool/) - Blog post by Keith Cirkel\n-   [Why we should stop using Grunt \u0026 Gulp](https://www.keithcirkel.co.uk/why-we-should-stop-using-grunt/)\n-   [Helpers and tips for npm run scripts](https://michael-kuehnel.de/tooling/2018/03/22/helpers-and-tips-for-npm-run-scripts.html) - Blog post by Michael Kühnel covering advanced topics\n-   [Advanced front-end automation with npm scripts](https://www.youtube.com/watch?v=0RYETb9YVrk) - Talk at Nordic.js 2015 by Kate Hudson\n-   [How to create a build system with npm scripts](http://www.penta-code.com/how-to-create-a-build-system-with-npm-scripts/) - Video tutorial series on setting up a front-end build system\n-   [Ecosystem-free task runner that goes well with npm scripts](https://github.com/scriptype/salinger)\n\n## Recipes\n\n### Delete files and folders\n\n**Gulp**\n\n```js\nconst del = require('del');\n\ngulp.task('clean', () =\u003e {\n  return del(['dist/report.csv', 'dist/mobile/**/*']);\n});\n```\n\n**npm del-cli**\n\n```sh\ndel \"dist/report.csv\" \"dist/mobile/**/*\"\n```\n\n**npm rimraf**\n\n```sh\nrimraf dist\n```\n\n**Shell**\n\n```sh\nrm -rf \"dist/report.csv\" \"dist/mobile\"\n```\n\n### ESLint\n\n**Gulp**\n\n```js\ngulp.task('eslint', () =\u003e {\n    return gulp.src('src/**/*.ts')\n        .pipe(g.eslint())\n        .pipe(g.eslint.format());\n});\n```\n\n**npm eslint**\n\n```sh\neslint src --ext ts\n```\n\n### ESLint in watch mode\n\n**Gulp**\n\n```js\ngulp.task('eslint:watch', (done) =\u003e {\n    const w = gulp.watch('src/**/*.ts', gulp.series('eslint'));\n    process.on('SIGINT', () =\u003e {\n        w.close();\n        done();\n    });\n});\n```\n\n**npm watchexec-bin**\n\n```sh\nwatchexec -w src \"npm run eslint\"\n```\n\n**Taskfile/Shell**\n\n```sh\n# Taskfile\neslint_watch() {\n    while true; do\n        inotifywait -r src \u0026\u0026 \"npm run eslint\"\n    done\n}\n\"$@\"\n```\n\n```sh\nsh Taskfile eslint_watch\n```\n\n### Parallel Tasks\n\n**Gulp**\n\n```js\ngulp.task('dev:watch', gulp.parallel('test:watch', 'eslint:watch');\n```\n\n**npm run-p**\n\n```sh\nrun-p test:watch eslint:watch\n```\n\n**npm concurrently**\n\n```sh\nconcurrently \"npm run test:watch\" \"npm run eslint:watch\"\n```\n\n**Taskfile/Shell**\n\n```sh\n# Taskfile\ndev_watch() {\n    npm run test:watch 2\u003e\u00261 \u0026\n    npm run eslint:watch 2\u003e\u00261 \u0026\n}\n\"$@\"\n```\n\n```sh\nsh Taskfile dev_watch\n```\n\n### Compile TypeScript\n\n**Gulp**\n\n```js\ngulp.task('scripts', () =\u003e {\n    return gulp.src('src/**/*.ts')\n        .pipe(g.typescript())\n        .pipe(gulp.dest('dist'));\n});\n```\n\n**npm typescript**\n\n```sh\ntsc --project tsconfig.json --outDir dist\n```\n\n### Copy files\n\n**Gulp**\n\n```js\ngulp.task('copy', () =\u003e {\n    return gulp.src('src/index.html')\n        .pipe(gulp.dest('dist/public'));\n});\n```\n\n**Shell**\n\n```sh\nmkdir -p dist/public\ncp src/index.html dist/public\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funlight%2Fyou-dont-need-task-runner","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Funlight%2Fyou-dont-need-task-runner","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Funlight%2Fyou-dont-need-task-runner/lists"}