Comments (3)
🎉
#!/usr/bin/env node
'use strict'
const fs = require('fs')
const path = require('path')
const glob = require('minimatch')
function traverse(cwd, parts = [], targets = []) {
const dirs = fs.readdirSync(cwd)
dirs.forEach(node => {
const stat = fs.lstatSync(path.join(cwd, node))
if (stat.isDirectory()) {
traverse(path.join(cwd, node), parts.concat([node]), targets)
} else if (stat.isFile() && node.endsWith('.sh')) {
targets.push(parts.concat([node.split('.')[0]]).join(':'))
}
})
return targets
}
function isTargetParallel(pkgJSON, target) {
return pkgJSON && pkgJSON.scripty && pkgJSON.scripty.parallel && pkgJSON.scripty.parallel.filter(str => glob(target, str)).length
}
function apply (pkgJSON, targets) {
targets.forEach(target => {
if (!pkgJSON.scripts[target]) {
console.log('Adding target %o...', target)
pkgJSON.scripts[target] = isTargetParallel(pkgJSON, target) ? 'SCRIPTY_PARALLEL=true scripty' : 'scripty'
}
})
}
function findPackageJSON() {
return path.join(process.cwd(), 'package.json')
}
const pkgJSONpath = findPackageJSON()
const pkgJSON = JSON.parse(String(fs.readFileSync(pkgJSONpath)))
const targets = traverse(path.join(path.dirname(pkgJSONpath), 'scripts'))
apply(pkgJSON, targets)
fs.writeFileSync(JSON.stringify(pkgJSON, null, 2))
from scripty.
Populating the "scripts" section of the package.json def has some niceties. Mainly:
- no need to know about
scripty
to be able to tell what a script does - you can easily check what all the scripts do via
npm run
.
I had thought about making a tool that populated the "scripts" section, but never got to a point where I really needed it – I guess I've only used the "scripts" field with simple configs.
I'll try using scripty
and report back in case I ever feel the need for this populater feature. :)
from scripty.
Thanks @dasilvacontin!
from scripty.
Related Issues (20)
- The scripty.path config is not work. HOT 2
- Bug while sharing scripts via node modules HOT 3
- Update dependency to remove vulnerability. HOT 2
- Scripts Path Not Read With Yarn 3
- PNPM Support HOT 3
- monorepo single config HOT 2
- In MAC, may be unenforceable directory, how can do before running scripts, automatically run chmod + x scripts/path/to/my/script HOT 7
- scripty ERR! It seems you may be running scripty from the command-line directly HOT 1
- pnpm build error, unknown options: 'commitizen_path', 'scripty_path', 'scripty_windowsPath' #
- Scripts fail with Node.js v >=18 HOT 3
- Revive builtIn scripts resolver HOT 2
- Batch scripts skip directories HOT 1
- Sharable scripts via a npm package HOT 3
- Default to silent mode; allow verbose option HOT 1
- multiple script locations HOT 6
- Allow directly running using "scripty <target>" HOT 8
- npm proposal for proxying "npm run"
- Script name and content is always printed HOT 3
- Issue while running scripty on windows10 HOT 7
- Options won't work with npm >= 7 HOT 7
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from scripty.