How to make offline installation of node-inspector? - node.js

How to offline install node-inspector on Windows server?
The code is here: https://github.com/node-inspector/node-inspector
https://www.npmjs.com/package/node-inspector

To my best knowledge, it's not possible to install Node Inspector (or any npmjs package) directly from npmjs.org and/or github.com without a working internet connection. However, you can prepare a self-containing package on a machine that does have internet connection, and then install this package on an offline host.
Here are the instructions, assuming Unix system.
On the machine connected to the internet
$ mkdir tempdir && cd tempdir
$ npm init # fill any data to prompts
$ npm install node-inspector
$ cd node_modules/node-inspector
$ tar czf ../../node-inspector.tgz .
$ cd ../..
Copy node-inspector.tgz to the offline machine and unpack it in the directory of your choice, e.g. $HOME/node-inspector or /usr/local/lib/node_modules/node-inspector
Create symlinks for node-inspector and node-debug in a folder that is in your PATH. For example:
$ cd /usr/local/bin
$ ln -s ../lib/node_modules/node-inspector/bin/node-inspector .
$ ln -s ../lib/node_modules/node-inspector/bin/node-debug .

Related

how to deploy node server on CPANEL?

I want to deploy node server over CPANEL how do i start?, I have searched but not relevant answer entertained me tell me solution if anyone did this.
How to install Node.js and NPM on cPanel Hosting Server
Node.js currently only works on servers running CentOS 6 or CentOS 7. To determine the CentOS version on your server, run this command:
uname -r
If the output from this command contains el6 (for example, 2.6.32-531.17.1.lve1.2.60.el6.x86_64) or el7 (for example, 3.10.0-714.10.2.lve1.5.12.el7.x86_64) , then your server is running CentOS 6 or CentOS 7. However, if you see el5h (for example, 2.6.32-531.23.3.lve1.2.66.el5h.x86_64), then your server is running CentOS 5 and does not support Node.js.
Download NodeJS. To make sure you’re in the root directory, run this command:
cd ~
wget https://nodejs.org/dist/latest/node-v10.15.0-linux-arm64.tar.gz
Extract the NodeJS Files:
tar xvf node-v10.15.0-linux-arm64.tar.gz
Now rename the folder to nodejs name, to do this type the following command:
mv node-v10.15.0-linux-x64 nodejs
Now install node and npm binaries, type the next commands:
mkdir ~/bin
cp nodejs/bin/node ~/bin
cd ~/bin 
ln -s ../nodejs/lib/node_modules/npm/bin/npm-cli.js npm
Node.js and npm are installed on your account. To verify, type the following commands:
node --version
npm --version
STOPPING A NODE.JS APPLICATION
To stop a currently running Node.js application, type the following command:
pkill node
This command immediately stops all running Node.js applications.

Docker - Properly Mounting Host Directory in Docker Container (Windows)

I am having some trouble mounting a directory on my machine into my Docker container. I would like to mount a directory containing files necessary to run a node server. So far, I have successfully been able to run and access my server in browser using the Dockerfile below:
# Use an ubuntu base image
FROM ubuntu:14.04
# Install Node.js and npm (this will install the latest version for ubuntu)
RUN apt-get update
RUN apt-get -y install curl
RUN curl -sL https://deb.nodesource.com/setup_0.12 | sudo bash -
RUN apt-get -y install nodejs
RUN apt-get -y install git
# Bundle app source (note: all of my configuration files/folders are in the current directory along with the Dockerfile)
COPY . /src
Install app dependencies
#WORKDIR /src
RUN npm install
RUN npm install -g bower
RUN bower install --allow-root
RUN npm install -g grunt
RUN npm install -g grunt-cli
#What port to expose?
EXPOSE 1234
#Run grunt on container start
CMD grunt
And these commands:
docker build -t test/test .
docker run -p 1234:1234 -d test/test
However, I figured that I would like the configuration files and whatnot to persist, and thought to do this by mounting the directory (with the files and Dockerfile) as a volume. I used other solutions on StackOverflow to get this command:
docker run -p 1234:1234 -v //c/Users/username/directory:/src -d test/test
My node server seems to start up fine (no errors in the log), but it takes significantly longer to do so, and when I try to access my webpage in browser I just get a blank page.
Am I doing something incorrectly?
EDIT: I have gotten my server to run--seems to have been a weird error in my configuration. However, it still takes a long time (around a minute or two) for my server to start when I mount a volume from my host machine. Does anyone have some insight as to why this is?

Running npm install using custom nodejs installation

I have 2 nodejs installation v0.8.18 ( executable name is node) and v0.10.20 (executable name is nodejs) in my ubuntu 12.04 system.
when I running npm install how can I specify npm use the executable named "nodejs" instead of "node"
If you in-fact actually want to toggle between various nodejs releases, there is an environment variable NODE_PATH which controls the directory path node uses to reach modules. The other issue is the env var PATH which the unix uses to reach executables, IE. node and npm
Additionally, node/npm uses these dirs/files :
~/.npmrc
~/.npm
~/tmp
~/.npm-init.js
those may or may not be impacted by different releases of node.
If you install each release from source code you have full control of NODE_PATH and PATH
source code for all releases available at http://nodejs.org/dist/
Below are the steps to install a given release from source
NOTE - this installs nodejs which gives you both node as well as npm, they come together per release.
to start fresh remove prior node.js and npm installs as well as these :
sudo mv ~/.npmrc ~/.npmrc_ignore
sudo mv ~/.npm ~/.npm_ignore
sudo mv ~/tmp ~/tmp_ignore
sudo mv ~/.npm-init.js ~/.npm-init.js_ignore
to install nodejs and npm as yourself NOT root do these commands (OSX/linux) :
parent_dir=${HOME}/bin_xxxx # replace bin_xxx with something specific
# to node release like bin_v0.10.31
mkdir ${parent_dir}
download source from : http://nodejs.org/download/
cd node-v0.xxxx
./configure --prefix=${parent_dir}/nodejs
make -j8
make install
which puts it into dir defined by above --prefix
export PATH=${parent_dir}/nodejs/bin:$PATH
define environment variable NODE_PATH so node can find dir for modules otherwise
npm install xxx will put newly installed module into dir in curr dir :
export NODE_PATH=${parent_dir}/nodejs/lib/node_modules
do above AND use syntax : npm install -g some_cool_module
always use the -g for global so it gets installed into dir $NODE_PATH
and not your $PWD
nodejs install gives you npm as well :
ls -la ${parent_dir}/nodejs/bin

Can't load module in Node console using symlinks

I'm on cygwin to do unix commands on win7 (launched cygwin.bat in windows cmd prompt).
My project directories are created in root like this:
$ mkdir -p app/models
$ mkdir -p app/node_modules
Then the symlink is created:
$ cd app/node_modules
$ ln -sf ../models
Back on the /app/ directory, I go into Node console to launch the module located in
app/models/movie.js:
Movie = require('models/movie');
But I get the following error:
Cannot find module 'models/movie'
ln takes 2 arguments, not one.
I found out that cygwin doesn't really create actual symlinks by default. I had to create native NTFS symlinks using export CYGWIN="winsymlinks:native"

Install NPM into home directory with distribution nodejs package (Ubuntu)

I'd like to use the distribution Node.js packages (or the chris-lea ppa for more recent releases) but install NPM to my home directory.
This may seem picky, but it's a pretty idiomatic way for polyglot/github-using developers to setup language runtime/library environments under Linux: distro packages for the runtime, 3rd-party libraries in per-user environment (see virtualenv, RVM - RVM will also build Ruby for you if you want). If necessary I will build node locally but it's a PITA since Node is becoming an incidental development requirement for lots of projects.
Instructions for installing node+npm to home directory
NPM will install local packages into your projects already, but I still like to keep the system away from my operating system's files. Here's how I suggest compartmentalizing Nodejs packages:
Install Nodejs and NPM via the chris-lea PPA. Then I set up a package root in my homedir to hold the Node "global" packages:
$ NPM_PACKAGES="$HOME/.npm-packages"
$ mkdir -p "$NPM_PACKAGES"
Set NPM to use this directory for its global package installs:
$ echo "prefix = $NPM_PACKAGES" >> ~/.npmrc
Configure your PATH and MANPATH to see commands in your $NPM_PACKAGES prefix by adding the following to your .zshrc/.bashrc:
# NPM packages in homedir
NPM_PACKAGES="$HOME/.npm-packages"
# Tell our environment about user-installed node tools
PATH="$NPM_PACKAGES/bin:$PATH"
# Unset manpath so we can inherit from /etc/manpath via the `manpath` command
unset MANPATH # delete if you already modified MANPATH elsewhere in your configuration
MANPATH="$NPM_PACKAGES/share/man:$(manpath)"
# Tell Node about these packages
NODE_PATH="$NPM_PACKAGES/lib/node_modules:$NODE_PATH"
Now when you do an npm install -g, NPM will install the libraries into ~/.npm-packages/lib/node_modules, and link executable tools into ~/.npm-packages/bin, which is in your PATH.
Just use npm install -g as you would normally:
[justjake#marathon:~] $ npm install -g coffee-script
... (npm downloads stuff) ...
/home/justjake/.npm-packages/bin/coffee -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/coffee
/home/justjake/.npm-packages/bin/cake -> /home/justjake/.npm-packages/lib/node_modules/coffee-script/bin/cake
coffee-script#1.3.3 /home/justjake/.npm-packages/lib/node_modules/coffee-script
[justjake#marathon:~] $ which coffee
/home/justjake/.npm-packages/bin/coffee
Jake's answer was posted in 2012 and while useful it references Chris Lea's Node.js PPAs who are no longer updated since march 2015.
Here's the steps I use to install Node.js and npm in my home directory:
Install Node.js with nvm (no sudo required):
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
source ~/.bashrc
nvm install 7
npm install -g npm # update npm
Now you can install -g without sudo and everything goes into ~/.nvm/
Or install Node.js without nvm (official instructions):
Install Node.js
Node.js v6 (current LTS as of May 2017):
curl -sL https://deb.nodesource.com/setup_4.x | sudo -E bash -
sudo apt-get install -y nodejs
Node.js v7:
curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
sudo apt-get install -y nodejs
Change npm's default directory to a local one:
mkdir ~/.npm-global
npm config set prefix '~/.npm-global'
export PATH="$HOME/.npm-global/bin:$PATH" # ← put this line in .bashrc
source ~/.bashrc # if you only updated .bashrc
Alternatively replace .npm-global by the directory of your choice.
Update npm and check it is installed in your $HOME directory:
$ npm install npm -g
/home/<username>/.npm-global/bin/npm -> /home/<username>/.npm-global/lib/node_modules/npm/bin/npm-cli.js
/home/<username>/.npm-global/lib
└─┬ npm#3.10.6
├─┬ glob#7.0.5
│ └── minimatch#3.0.2
├── npm-user-validate#0.1.5
└── rimraf#2.5.3
Now you can install -g without sudo and without messing with your system files.
The solution posted by Just Jake is great. However, due to a bug with npm > 1.4.10, it may not work as expected. (See this and this)
While the bug is solved, you can downgrade to npm 1.4.10 by following this steps:
Comment the prefix line in your $HOME/.npmrc
Run sudo npm install -g npm#1.4.10
Ensure that the right version of npm is installed (npm --version)
Uncomment the prefix line in your $HOME/.npmrc
Proceed to install your global packages in your home folder!.
Because python does already a great job virtualenv, I use nodeenv. Compared to nvm, you can create multiple environments for the same node version (e.g. two environments for node 0.10 but with different sets of packages).
ENVNAME=dev1
# create an environment
python -m virtualenv ${ENVNAME}
# switch to the newly created env
source ${ENVNAME}/bin/activate
# install nodeenv
pip install nodeenv
# install system's node into virtualenv
nodeenv --node=system --python-virtualenv
The readme is pretty good:
https://github.com/ekalinin/nodeenv
I used #just-jake solution for some time and found that nvm is easier to setup.
Also it's much powerful solution that allows to install and use different versions of nodejs.
On Ubuntu 14.04 or 16.04:
Install prerequisite packages for building nodejs:
sudo apt-get update
sudo apt-get install build-essential libssl-dev
Install nvm:
curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash
In case newer version of nvm will be available you can find actual installation command on nvm site.
nvm installer will add bootstrap script to ~/.bashrc, so you need either to reopen terminal to run it, or to do:
source ~/.bashrc
Now you can install any nodejs version you like, switch between them etc.
Use nvm ls-remote to list available nodejs versions.
To install, for example, nodejs v4.2.4 do:
# install v4.2.4
nvm install v4.2.4
# use nodejs v4.2.4 in the current terminal session
nvm use v4.2.4
# use v4.2.4 by default in new terminal session
nvm alias default v4.2.4
As stated already here and here
npm config set prefix ~
echo export PATH=\$PATH:\~/bin >> ~/.bashrc
. ~/.bashrc
Other answers have outdated solutions: 2020's solution is using NPM_CONFIG_PREFIX environment variable. (See details)
For example,
$ NPM_CONFIG_PREFIX="$HOME/.npm-packages" npm install -g ios-sim
/Users/<name>/.npm-packages/bin/ios-sim -> /Users/<name>/.npm-packages/lib/node_modules/ios-sim/bin/ios-sim
+ ios-sim#9.0.0
added 108 packages from 68 contributors in 3.094s
To expand on the answer provided by Just Jake and user1533401: I am unable to downgrade as I use shared hosting and node is installed in a system directory. This is also why I have change the directory where npm installs global scripts if I want it to do that. For those in the same boat, here is a another temporary fix I found works:
npm install -g --prefix=$(npm config get prefix) <package>
The bug is that npm doesn't read your per-user config file, but specifying it every time you install a global script fixes that. Found here.
I have a slightly different solution to a similar problem, which was due to my installing npm globally so I can use it in the Terminal of my macOS system. I simply initialised it locally at the root directory of my repository with the command:
npm init --yes
This did the trick for enabling me to install node packages in the local root directory at /node_modules with the "package.json" and "package-lock.json" files instead of at the user's home directory.
You can use npm-user to automatically set up npm to install packages into your user's directories instead of the system's. No root privileges needed.
Here's a link to the script, instructions on how to use it and information about its options. It works on macOS, Linux, *BSD and Windows.
You can run it like so:
$ curl -s "https://raw.githubusercontent.com/alexdelorenzo/npm-user/main/npm-user.sh" | bash
After you run it, using npm install -g <package> will install packages to your user's directories without needing to use sudo.
Here's the code if you want to copy and paste it into your console:
#!/usr/bin/env bash
# Copyright 2022 Alex DeLorenzo <alexdelorenzo.dev>. Licensed under the GPLv3.
export ROOT="${1:-$HOME}"
export NPM_DIR=".npm-packages"
export NPM_ROOT="$ROOT/$NPM_DIR"
export NPM_BIN="$NPM_ROOT/bin"
export NPM_MAN="$NPM_ROOT/share/man"
export BASH_RC="$HOME/.bashrc"
export ZSH_RC="$HOME/.zshrc"
export DEFAULT_RC="$BASH_RC"
export RC_ERR=1
export INDENT=2
set -e
shopt -s expand_aliases
alias indent="paste /dev/null - | expand -$INDENT"
quiet() {
"$#" &> /dev/null
}
expand-tilde() {
local path="$1"
echo "${path/#\~/$HOME}"
}
create-paths() {
local bin="${1:-$NPM_BIN}"
local man="${2:-$NPM_MAN}"
mkdir --parents --verbose "$bin" "$man"
}
set-prefix() {
npm config set prefix "$NPM_ROOT"
}
get-vars() {
local bin="${1:-$NPM_BIN}"
local man="${2:-$NPM_MAN}"
cat <<EOF
export PATH="\$PATH:$bin"
export MANPATH="\${MANPATH:-\$(manpath)}:$man"
export NPM_PACKAGES="$NPM_ROOT"
EOF
}
already-added() {
local rc="${1:-$DEFAULT_RC}"
local bin="${2:-$NPM_BIN}"
local man="${2:-$NPM_MAN}"
local vars="$(get-vars "$bin" "$man")"
quiet grep "$vars" "$rc"
}
main() {
local rc="$(expand-tilde "${1:-$DEFAULT_RC}")"
local bin="$(expand-tilde "${2:-$NPM_BIN}")"
local man="$(expand-tilde "${3:-$NPM_MAN}")"
printf "Creating %s and %s\n" "$bin" "$man"
create-paths "$bin" "$man" || {
printf "Couldn't create paths: %s and %s.\n" "$bin" "$man"
return $RC_ERR
}
printf "Setting npm prefix.\n"
set-prefix || {
printf "Couldn't set prefix.\n"
return $RC_ERR
}
if ! already-added "$rc" "$bin" "$man"; then
printf "Writing to %s.\n" "$rc"
get-vars "$bin" "$man" >> "$rc"
fi || {
printf "Unable to write to %s.\n" "$rc"
printf "Add the following to your shell's configuration file:\n\n"
get-vars "$bin" "$man" | indent
return $RC_ERR
}
printf "Done.\n\n"
printf "To load the changes in this shell, run:\n"
printf "\tsource %s\n" "$rc"
}
main "$2" "$3" "$4"
At least on Ubuntu the default config for system wide npm is that npm install --global tries to install packages to /usr/lib/node_modules. To set different default for your own user account run following once:
mkdir -p ~/.npm/lib/bin
npm config set prefix "~/.npm/lib"
in addition you want following fragment in .profile:
# set PATH so it includes user's private .npm/lib/bin if it exists
if [ -d "$HOME/.npm/lib/bin" ] ; then
PATH="$HOME/.npm/lib/bin:$PATH"
fi
If you now install something with npm install --global packagename it will end up in correct location and can be found in your PATH (you may need to logout and re-login for .profile changes to take effect).
Of course, you could select some other directory instead. For example ~/.config/npm could make sense for modern systems.

Resources