![require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages](https://cdn.sanity.io/images/cgdhsj6q/production/be8ab80c8efa5907bc341c6fefe9aa20d239d890-1600x1097.png?w=400&fit=max&auto=format)
Security News
require(esm) Backported to Node.js 20, Paving the Way for ESM-Only Packages
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
@dreipol/dreiup
Advanced tools
Install this package globally on your machine
npm i @dreipol/dreiup -g
All the available cli features can be listed using the following command
dreiup --help
Core Modules
commander A library to create CLI subcommands and handles option parsing
Inquirer Handles user props. This way we can minimize the amount of options required for a command And give the user a simpler experience.
Testing Modules
Mocha Test runner module to execute our tests
Chai Assertion library that works with any testrunner
create <projectName>
dreiup create <projectName>
will create a new project. It will generate a sub folder in the current directory with
the given project name and install the template from dreiup-templates
from the master
branch.
In case you need another branch to be used, you can add the option -b <branchName>
or --branch <branchName>
.
Or you can specify a template source directory with -t <path>
or --template <path>
. This will not fetch any
data from the remote repo, but will use the given path as a template source folder and will then install it's content
into the projectName
subfolder
setup
dreiup setup
creates the ~/.dreiup.json
file in your home directory storing your private global variables.
Your ~/.dreiup.json
file will look something like:
{
"GITHUB_OAUTH_TOKEN": "1d5723BLABLABLA1a9c6c30"
}
To see if everything behaves correctly you can link this repo with npm link
. This exposes the dreiup
cli command
that is then linked directly into this directory instead of the global module installation
- src
- commands
- cli
- test
src
core functionality used to "boot" the cli, load commands and config and so on. Logic shared between the commands
can also be placed here.src/commands
contains all available commandssrc/util
helper functions that can be shared across several filessrc/index.js
Logic that is dedicated to the CLI boot is placed here. Like loading files & config and so ontest
location to add the unittest for the files within src
- commands
- <COMMAND_NAME>
- command.js
- index.spec.js
- prompt.js
- index.js
commands
Folder containing all available commands
<COMMAND_NAME>
Folder containing a single command. This name should correspond to the name available in the cli
command.js
The command initialisation. This file is autoloaded to expose the command and its description
index.spec.js
Containing all unittests for the command logic within index.js
prompt.js
Prompts spawned by the command
index.js
Contains the main logic of the command. All logic is here to make the command as testable as possible
Create a new folder with the command name.
In this case we will use foo
Create the command file index.command.js
which will register a new command. This file should export a function.
import program from 'commander';
import foo from './index.js';
export default function() {
program
.command('foo <name>')
.alias('f')
.description('Example foo command')
.action(async (name) => {
await foo(name)
});
};
Create the spec file index.spec.js
. Within this file, the logic from index.js
will be tested
Add the index.js
. Within this file all the logic should be placed so the index.command.js
only has to call
one function from this file, pass all parameters and that's it.
inquirer
within a commandIn order to let the user make more decisions, we simply wrap the main logic from index.js
into another function.
Example before
export default function foo(config, name) {
console.log(`Foo bar ${name}`);
};
Example with inquirer
import inquirer from 'inquirer';
function foo(config, name, gender) {
console.log(`Foo bar ${gender} ${name}`);
}
export default function (config, name) {
return inquirer
.prompt([
{
type: 'list',
name: 'gender',
message: 'Select gender',
choices: ['male', 'female']
}
])
.then(({gender}) => {
return foo(config, name, gender);
});
};
FAQs
Command line interface to kick-start dreipol projects
The npm package @dreipol/dreiup receives a total of 6 weekly downloads. As such, @dreipol/dreiup popularity was classified as not popular.
We found that @dreipol/dreiup demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 6 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
require(esm) backported to Node.js 20, easing the transition to ESM-only packages and reducing complexity for developers as Node 18 nears end-of-life.
Security News
PyPI now supports iOS and Android wheels, making it easier for Python developers to distribute mobile packages.
Security News
Create React App is officially deprecated due to React 19 issues and lack of maintenance—developers should switch to Vite or other modern alternatives.