48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
---
 | 
						|
tags: [node-js]
 | 
						|
created: Friday, April 26, 2024
 | 
						|
---
 | 
						|
 | 
						|
# NodeJS scripts
 | 
						|
 | 
						|
If we want to use NodeJS as a scripting language without going to the trouble of
 | 
						|
setting up an NPM-based development environment, we can use the following
 | 
						|
architecture.
 | 
						|
 | 
						|
```js
 | 
						|
#!/usr/bin/env node
 | 
						|
 | 
						|
const process = require("process");
 | 
						|
 | 
						|
const actualScript = (firstParam, secondParam) => {
 | 
						|
  // Do something
 | 
						|
};
 | 
						|
 | 
						|
if (require.main === module) {
 | 
						|
  const [, param1, param2] = process.argv;
 | 
						|
  actualScript(param1, param2).catch(console.error);
 | 
						|
}
 | 
						|
```
 | 
						|
 | 
						|
Basically we have a function that contains the main actions of the script. This
 | 
						|
is then invoked within `main` in the manner of a Bash or
 | 
						|

 | 
						|
 | 
						|
This obviously requires the Node binary to be in your path and the script must
 | 
						|
be run with executable privileges.
 | 
						|
 | 
						|
If you use any module not in the Node core, you will need to have this installed
 | 
						|
globally for it to work. (There are
 | 
						|
[ways around this](https://thom4.net/2014/self-contained-node-scripts/) for Node
 | 
						|
scripts you publish but for personal scripts this doesn't matter.)
 | 
						|
 | 
						|
## `require.main`
 | 
						|
 | 
						|
This construction checks that the script is being directy invoked via the 'node'
 | 
						|
command in the terminal rather than called by another module.
 | 
						|
 | 
						|
This is equivalent to the [following construct]() in Python:
 | 
						|
 | 
						|
```py
 | 
						|
if __name__ == "__main__":
 | 
						|
```
 |