4 # homepage: https://nodejs.org
5 # tagline: JavaScript V8 runtime
7 # Node.jsĀ® is a JavaScript runtime built on Chrome's V8 JavaScript engine
10 # node -e 'console.log("Hello, World!")'
18 # <td>Run a webserver</td>
19 # <td><pre><code class="language-bash">
23 # npm install --save express</code></pre>
25 # <code>app.js:</code>
27 # <pre><code class="language-javascript">'use strict'
28 # var express = require('express');
29 # var app = express();
31 # app.use('/', function (req, res, next) {
32 # res.end("Hello, World!");
35 # module.exports = app;</code></pre>
37 # <code>server.js:</code>
39 # <pre><code class="language-javascript">'use strict'
40 # var http = require('http');
41 # var app = require('./app.js');
42 # http.createServer(app).listen(8080, function () {
43 # console.log('Listening on', this.address());
46 # <pre><code class="language-bash">npm start</code></pre>
58 new_node_home="${HOME}/.local/opt/node-v${WEBI_VERSION}"
59 new_node="${HOME}/.local/opt/node-v${WEBI_VERSION}/bin/node"
61 # Test for existing version
63 cur_node="$(command -v node)"
65 if [ -e "$new_node_home/bin/node" ]; then
66 # node of some version is already installed
67 if [ "v${WEBI_VERSION}" == "$("$new_node_home/bin/node" -v 2>/dev/null)" ]; then
68 echo node v${WEBI_VERSION} already installed at $new_node_home
72 if [ "$cur_node" != "$new_node" ]; then
73 echo "WARN: possible conflict with node v$WEBI_VERSION at $cur_node"
76 # Note: this file is `source`d by the true installer and hence will have the webi functions
78 # because we created releases.js we can use webi_download()
79 # downloads node to ~/Downloads
82 # because this is tar or zip, we can webi_extract()
83 # extracts to the WEBI_TMP directory, raw (no --strip-prefix)
86 pushd "$WEBI_TMP" 2>&1 >/dev/null
87 echo Installing node v${WEBI_VERSION} as "$new_node"
89 # simpler for single-binary commands
90 #mv ./example*/bin/example "$HOME/.local/bin"
92 # best for packages and toolchains
93 rm -rf "$new_node_home"
94 if [ -n "$(command -v rsync 2>/dev/null | grep rsync)" ]; then
95 rsync -Krl ./node*/ "$new_node_home/" 2>/dev/null
97 cp -Hr ./node*/* "$new_node_home/" 2>/dev/null
98 cp -Hr ./node*/.* "$new_node_home/" 2>/dev/null
106 # TODO get better output from pathman / output the path to add as return to webi bootstrap
107 webi_path_add "$new_node_home/bin"
109 echo "Installed 'node' and 'npm'"