NodeJS: Difference between revisions
No edit summary |
|||
(28 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
Node.js is a JavaScript environment based on Chrome's V8 JavaScript engine. | Node.js is a JavaScript environment based on Chrome's V8 JavaScript engine.<br> | ||
Node Package Manager (npm) is used to manage node packages installed on your computer or used in your node projects.<br> | Node Package Manager (npm) is used to manage node packages installed on your computer or used in your node projects.<br> | ||
This page is primarilly on node-specific APIs and usage. See also [[JavaScript]] and [[TypeScript]]. | |||
=Installation= | ==Installation== | ||
== | ===Linux=== | ||
Using the [https://github.com/nvm-sh/nvm Node Version Manager (nvm)] is recommended.<br> | |||
This installs nvm in your home directory. | |||
You should never use sudo when using nvm or npm. | |||
Using the [https://github.com/nvm-sh/nvm Node Version Manager (nvm)] is recommended. This | Doing so could lead to permission issues. | ||
You should never use sudo when using npm. Doing so could lead to permission issues. | |||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash | curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash | ||
source ~/.bashrc | source ~/.bashrc | ||
nvm install --lts node | nvm install --lts node | ||
Line 17: | Line 16: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
=Usage= | ===Windows=== | ||
You can [https://nodejs.org/en/ install node directly] or use [https://github.com/coreybutler/nvm-windows nvm-windows].<br> | |||
Note that nvm-windows is not a port of nvm. | |||
<syntaxhighlight lang="bash"> | |||
choco install nvm | |||
nvm install lts | |||
</syntaxhighlight> | |||
==Usage== | |||
JavaScript files can be run directly using <code>node index.js</code> | JavaScript files can be run directly using <code>node index.js</code> | ||
==Filesystem Access== | ===Filesystem Access=== | ||
Install [https://www.npmjs.com/package/fs-extra fs-extra] to your project. | Install [https://www.npmjs.com/package/fs-extra fs-extra] to your project. | ||
<syntaxhighlight lang="js"> | <syntaxhighlight lang="js"> | ||
Line 27: | Line 34: | ||
// Synchronous functions | // Synchronous functions | ||
// Only in fs-extra | //// Only in fs-extra | ||
// Remove file or folder (rm -rf) | // Remove file or folder (rm -rf) | ||
// Does nothing if path doesn't exist | // Does nothing if path doesn't exist | ||
Line 37: | Line 43: | ||
fs.ensureDirSync('/tmp/folder1/folder2'); | fs.ensureDirSync('/tmp/folder1/folder2'); | ||
//// Available in node's native 'fs' | |||
// Available in node's native 'fs' | |||
// List all files and folders in a directory | // List all files and folders in a directory | ||
fs.readdirSync('/tmp'); | fs.readdirSync('/tmp'); | ||
Line 55: | Line 59: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==Logging== | ====Paths==== | ||
* <code>path.extname</code> | |||
===Writing to a file=== | |||
[https://nodejs.org/api/fs.html Reference]<br> | |||
<syntaxhighlight lang="javascript"> | |||
const fs = require('fs-extra'); | |||
let pw = 'My_password_is_kkk'; | |||
fs.writeFileSync('pw.txt', pw); | |||
</syntaxhighlight> | |||
===Logging=== | |||
Mostly the same as web JavaScript.<br> | Mostly the same as web JavaScript.<br> | ||
[https://nodejs.org/api/console.html Reference] | [https://nodejs.org/api/console.html Reference] | ||
<syntaxhighlight> | <syntaxhighlight lang="js"> | ||
console.log("a", "b"); | console.log("a", "b"); | ||
Line 64: | Line 81: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
==CSV== | ===CSV=== | ||
Install csv from npm.<br> | Install csv from npm.<br> | ||
[https://csv.js.org/parse/api/ Reference] | [https://csv.js.org/parse/api/ Reference] | ||
<syntaxhighlight> | <syntaxhighlight lang="js"> | ||
</syntaxhighlight> | |||
===Running other processes=== | |||
You can invoke other processes or CLI programs using <code>spawn</code> or <code>spawnSync</code> | |||
<syntaxhighlight lang="javascript"> | |||
const {spawn, spawnSync} = require('child_process'); | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=Package Management= | Example: | ||
<syntaxhighlight lang="javascript"> | |||
spawnSync("ffmpeg", flatten([ | |||
"-i", file, | |||
"-c:v libx265 -crf 28 -preset medium -c:a libopus -b:a 128K".split(" "), | |||
"-y", output_path | |||
]), { | |||
cwd: process.cwd(), | |||
env: process.env, | |||
stdio: [process.stdin, process.stdout, process.stderr], | |||
encoding: 'utf-8' | |||
}); | |||
</syntaxhighlight> | |||
==Debugging== | |||
===Inspector=== | |||
* Add the <code>--inspect</code> flag to your node call (before the name of the script). | |||
* Then go to <code>chrome://inspect</code> | |||
==Package Management== | |||
===NPM=== | ===NPM=== | ||
To add node packages to an new project. Use <code>npm init</code><br> | To add node packages to an new project. Use <code>npm init</code><br> | ||
Line 83: | Line 125: | ||
pnpm uses its own lockfile instead of packages-lock.json. | pnpm uses its own lockfile instead of packages-lock.json. | ||
=Useful Packages= | ===Publishing=== | ||
See [[Npm (software)#Publishing]]. | |||
==Useful Packages== | |||
===fs-extra=== | ===fs-extra=== | ||
[https://www.npmjs.com/package/fs-extra fs-extra] adds additional commands for accessing the filesystem such as copying and moving files. | [https://www.npmjs.com/package/fs-extra fs-extra] adds additional commands for accessing the filesystem such as copying and moving files. | ||
===node-fetch=== | |||
[https://www.npmjs.com/package/node-fetch node-fetch]<br> | |||
===file-type=== | |||
[https://www.npmjs.com/package/file-type file-type]<br> | |||
[https://www.npmjs.com/package/file-type-cli file-type-cli]<br> | |||
Detects the file type of a file or buffer | |||
===argparse=== | |||
[https://www.npmjs.com/package/argparse argparse] | |||
This is a port of python's argparse. However, it does not support configuration files. | |||
{{hidden | Example | | |||
<syntaxhighlight lang="python"> | |||
const parser = new ArgumentParser({ | |||
version: "0.0.1", | |||
addHelp: true, | |||
description: "Description here" | |||
}); | |||
// Add your arguments here | |||
parser.addArgument(["--config"], { | |||
type: String, | |||
help: "Path to config file (optional)" | |||
}); | |||
const args = (function() { | |||
let myArgs = parser.parseArgs(); | |||
if (myArgs.config && myArgs.config.length > 0) { | |||
const filedata = fs.readFileSync(myArgs.config, "utf8"); | |||
const myArgsArr = filedata | |||
.split("\n") | |||
.filter(x => x.length > 0) | |||
.map(x => "--" + x) | |||
.map(x => x.split("=")) | |||
.flatten(); | |||
myArgs = parser.parseArgs(myArgsArr); | |||
} | |||
return myArgs; | |||
})(); | |||
</syntaxhighlight> | |||
}} | |||
===node-worker-threads-pool=== | |||
[https://www.npmjs.com/package/node-worker-threads-pool Link] | |||
A cool thread pool implementation. |