Mettre à jour 'README.md'
This commit is contained in:
parent
917e7b18b2
commit
ca486192d8
122
README.md
122
README.md
|
@ -1,3 +1,123 @@
|
|||
# esm-cli
|
||||
|
||||
EcmaScript Module launcher
|
||||
EcmaScript Module launcher
|
||||
|
||||
Lunch ES modules using cli, accessing a specific export function or data, passing parameters.
|
||||
|
||||
## Install
|
||||
|
||||
Just install module as a global command with npm (not yet published)
|
||||
`npm install -g esm-cli`
|
||||
|
||||
Until it published on npm you can install globaly after a git clone:
|
||||
```
|
||||
git clone https://git.p2p.legal/dig/esm-cli.git
|
||||
cd esm-cli
|
||||
npm install -g .
|
||||
```
|
||||
|
||||
You should get acces to a global `esm` command.
|
||||
|
||||
## Usage
|
||||
|
||||
`esm path/to/esm_file:export_name [params]`
|
||||
|
||||
With esm-cli you can instanciate a full ES module file, executing it's content, and retreive an exported variable or execute an exported function. It understand returned promises or async function.
|
||||
|
||||
### Get exported variables
|
||||
|
||||
Let's write a simple ES module (myModule.js):
|
||||
|
||||
```javascript
|
||||
export default 42
|
||||
export var user_config = {
|
||||
some: "json"
|
||||
}
|
||||
```
|
||||
|
||||
And let's use it in cli:
|
||||
|
||||
```bash
|
||||
esm myModule
|
||||
> 42
|
||||
```
|
||||
Note: .js extension is not needed (nodejs resolver).
|
||||
|
||||
In a bash file you can invoke some text return using command subsitutions:
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
es_var=$(esm myModule)
|
||||
echo "EcmaScript said: $es_var"
|
||||
```
|
||||
If only a path to the file is provided, the default export is returned in any.
|
||||
You can access any named exports:
|
||||
```bash
|
||||
esm myModule:user_config
|
||||
> { "some": "json" }
|
||||
```
|
||||
|
||||
### Use exported functions
|
||||
When the exported "thing" is a function (async or not), it is executed passing command line parameters if given.
|
||||
|
||||
Imagine a simple ES module library (myLib.js):
|
||||
|
||||
```javascript
|
||||
export default function hello()
|
||||
{
|
||||
console.log( 'Hello world !' )
|
||||
}
|
||||
export function greet( params ) {
|
||||
return `Hello ${params[0]}`
|
||||
}
|
||||
```
|
||||
Then you can write:
|
||||
```bash
|
||||
esm myLib
|
||||
> Hello world !
|
||||
```
|
||||
```bash
|
||||
esm myLib:greet Pierre
|
||||
> Hello Pierre !!
|
||||
```
|
||||
### Promise/async support
|
||||
|
||||
If the returned result is a promise, because explicitly returned, or from an async function, esm-cli will take care of waiting it's resolution returning the resolved value (gently catching rejections showing nothing).
|
||||
|
||||
### Parameters parsing
|
||||
|
||||
Command line parameters are parsed into an Array before it is given to a called function.
|
||||
This Array contains a list of strings corresponding to each string given without hyphen `-`:
|
||||
|
||||
(myLib.js)
|
||||
```javascript
|
||||
export function showParams( params )
|
||||
{
|
||||
console.log( params )
|
||||
}
|
||||
```
|
||||
|
||||
```bash
|
||||
esm myLib:showParams param1 param2 param3
|
||||
> [ "param1", "param2", "param3" ]
|
||||
```
|
||||
|
||||
... and this array is augmented with properties corresponding to hyphen params, with value or "true" if not:
|
||||
```bash
|
||||
esm myLib:showParams param1 param2 param3 -s --t -foo --bar -baz:42 --val=some
|
||||
> [ "param1", "param2", "param3", s: true, t: true, foo: true, bar: true, baz: 42, val: "some" ]
|
||||
```
|
||||
|
||||
Note: order don't matters...
|
||||
|
||||
You can then use ES destructuration to filter named paremeters:
|
||||
|
||||
```javascript
|
||||
export function myAwesomeFunction( [ first, second, , forth ] ) // Array destructuration gets simple params
|
||||
{
|
||||
console.log( first, second, forth )
|
||||
}
|
||||
export function myAwesomeFunction2( { foo, val, baz } ) // Object destructuration gets named params
|
||||
{
|
||||
console.log( foo, val, baz )
|
||||
}
|
||||
```
|
Loading…
Reference in New Issue