Skip to content

Instantly share code, notes, and snippets.

@mritzco
Last active April 28, 2024 06:30
Show Gist options
  • Star 16 You must be signed in to star a gist
  • Fork 3 You must be signed in to fork a gist
  • Save mritzco/4495cf5fa863779ed1ac0e4edf9a1ed0 to your computer and use it in GitHub Desktop.
Save mritzco/4495cf5fa863779ed1ac0e4edf9a1ed0 to your computer and use it in GitHub Desktop.
Create Node Package (cli) executable from npm scripts
#!/usr/bin/env node
//module/cli.js
const fs = require("fs"),
path = require("path")
/** Parse the command line */
var args = process.argv.slice(2);
// Validate input
if (args.length !== 2) {
console.log("Warning: Requires 2 arguments");
console.log("node index.js [path/source.html] [targetfile]");
process.exit();
}
const src = args[0];
const target = args[1];
const dirsrc = path.dirname(src);
if (!fs.existsSync(src)) {
console.log("Error: Source file doesn't exist. Given: ", src);
process.exit();
}
require('./index.js')({src, target, dirsrc});

Creating an executable NPM package and using it

This short guide explains how to create an NPM package that can be called as a script from another project. For clarity: The package to execute will be called: Module The place where you use it: Application

1. Build your module

Create a standard module ignore command line parsing Your entry point index.html should be callable using require()

Paths

If your module is split in multiple files make sure to use full paths to include them. For example:

/* Files at lib:
- a.js
- b.js

In a.js:
*/
const b = require('b'); // Won't work
const b = require('./b'); // Works

1.1 Create a command line entry point

Create another entry point, a node file. Add in here: for example: cli.js

  • First line must be: #!/usr/bin/env node
  • Command line parsing
  • Help
  • Validation
  • Require your index.js (or main entry point) and run it

1.2 Modify your package.json

We'll add a line so npm knows it has to copy the cli.js into .bin

"bin": {
  "name_of_your_app": "./cli.js"
 }
 //or 
 "bin": "./cli.js"

1.3 Publish

Check a guide on publishing to npm, when you're ready:

npm publish

Now your package is readily available to be used anywhere.

2. Use your module as script in another application

Say you build a parser, a file processor or any other cool thing. Now you want a new node application to use it when building.

2.1 Install as any other NPM module

npm install your-package --save-dev

2.2 Using it as a script

Open your package.json

  "scripts": {
    "name_to_call": "your_module_name param1 param2 param3"
  },

2.3 Run it

npm run name_to_call 

And that's it! Enjoy

References

//module/index.js
module.exports = require('main');
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment