Comments (7)
Okay, defaults to use the .js
extension would break a lot of projects.
Whats wrong with npm link
and adding the binaries to package.json
? Then you can also test your bins with node ./bin/gest-test.js
from args.
Actually, I am with you there. Thanks for challenging my point, I agree!
from args.
Here is an example of what I was thinking:
// Generate full name of binary
const bin = module.parent.exports.bin
const full = this.binary + '-' + (Array.isArray(details.usage) ? details.usage[0] : details.usage)
const binFull = path.join(__dirname, bin[full] || `${full}.js`)
...
this.child = spawn(binFull, args, {
from args.
I also experimented with this a while ago - my working example was:
const bin = process.mainModule.filename
const subCommand = (Array.isArray(details.usage) ? details.usage[0] : details.usage)
const fullPath = path.join(bin.split(path.sep).slice(0, -1).join(path.sep) + '/' + this.binary + '-' + subCommand)
const ext = path.extname(bin)
let binFull = fullPath
if (ext.length > 0) {
const withExt = path.basename(bin, ext) + '-' + subCommand + ext
binFull = path.join(bin.split(path.sep).slice(0, -1).join(path.sep) + '/' + withExt)
}
this.child = spawn(binFull, args, {
...
The problem with that is that you have to chmod +x
all binaries while developing. Otherwise you get Error: spawn EACCES
.
I think adding the binaries to the package.json
and run npm link
is the easiest and best solution. See #46
from args.
@ntwcklng I have not had a problem with that since I test my 'binaries' as node ./bin/gest-test.js [options]
, so I don't run into the EACCES
error. I think the solution I posted tackles two issues: 1. it defaults to looking in package.json
for the paths to your binaries and 2. defaults to use a .js
extension if you don't put them in package.json
.
The only two issues I was running into was that the it wasn't finding the file without __dirname
and secondly it was looking for a binary without the .js
extension (which I would like to keep for syntax highlighting etc.)
from args.
We should document this process better
from args.
@ntwcklng yeah it was really just a matter of my understanding how args
worked. If anything, documenting better should be a different issue. Closing.
from args.
Related Issues (20)
- Feature: Strict type parsing mode
- Feature: Windows-style swithes
- Feature: Modifiable`showVersion()` method
- Issue: How do I display app's description on the help message?
- Issue: Change default arguments HOT 1
- Options' defaults not used when using command with init function HOT 3
- Handling top level command HOT 5
- Fails to parse decimal number
- The command docs are impossible to figure out.
- Access flags from command
- Force No short option for an argument
- MRI defaults override option given in short-form
- [Bug] Passing the `--help` option with a subcommand prints the primary command help instead HOT 1
- Consider using colorette instead of chalk
- This package fails after used in built electron app. HOT 1
- Status code 1 instead of 0..
- Default `version` command does not work for esmodule packages
- How to use options value with cmd in cmd? HOT 1
- Show invalid version when using `ts-node`
- spawn error HOT 1
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 args.