UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

223 lines (135 loc) 6.89 kB
[Node.js](http://nodejs.org/) is a JavaScript runtime environment combined with useful libraries. It uses [Google's V8 engine](https://code.google.com/p/v8/) to execute code outside of the browser. Due to its event-driven, non-blocking I/O model, it is suitable for real-time web applications. ## Contents * [1 Installation](#Installation) * [1.1 Alternate installations](#Alternate_installations) * [2 Node Packaged Modules](#Node_Packaged_Modules) * [2.1 Managing packages with npm](#Managing_packages_with_npm) * [2.1.1 Installing packages](#Installing_packages) * [2.1.1.1 Allow user-wide installations](#Allow_user-wide_installations) * [2.1.2 Updating packages](#Updating_packages) * [2.1.2.1 Updating all packages](#Updating_all_packages) * [2.1.3 Removing packages](#Removing_packages) * [2.1.4 Listing packages](#Listing_packages) * [2.2 Managing packages with pacman](#Managing_packages_with_pacman) * [3 Troubleshooting](#Troubleshooting) * [3.1 node-gyp python errors](#node-gyp_python_errors) * [3.2 Cannot find module ... errors](#Cannot_find_module_..._errors) * [4 Additional resources](#Additional_resources) ## Installation [Install](/index.php/Install "Install") the [nodejs](https://www.archlinux.org/packages/?name=nodejs) package. ### Alternate installations It is not uncommon to need or desire to work in different versions of [nodejs](https://www.archlinux.org/packages/?name=nodejs). A preferred method among node users is to use [NVM](https://github.com/creationix/nvm) (Node Version Manager). [nvm](https://aur.archlinux.org/packages/nvm/) allows for cheap and easy alternative installs. You can set it up by adding this to your shell's startup file: ``` # Set up Node Version Manager source /usr/share/nvm/init-nvm.sh ``` Or this if you want to use a custom nvm directory: ``` # Set up Node Version Manager export NVM_DIR="$HOME/.nvm" # You can change this if you want. export NVM_SOURCE="/usr/share/nvm" # The AUR package installs it to here. [ -s "$NVM_SOURCE/nvm.sh" ] && . "$NVM_SOURCE/nvm.sh" # Load NVM ``` Usage is well documented on the project's GitHub but is as simple as: ``` $ nvm install 8.0 Downloading and installing node v8.0.0... [..] $ nvm use 8.0 Now using node v8.0.0 (npm v5.0.0) ``` If you decide to use [nvm](https://aur.archlinux.org/packages/nvm/), it would also be a good idea to use a nodejs pseudo package [nodejs-fake](https://aur.archlinux.org/packages/nodejs-fake/) so packages like [npm](https://www.archlinux.org/packages/?name=npm) don't install [nodejs](https://www.archlinux.org/packages/?name=nodejs) as their dependency. ## Node Packaged Modules [npm](https://www.npmjs.org/) is the official package manager for node.js. It can be [installed](/index.php/Install "Install") with the [npm](https://www.archlinux.org/packages/?name=npm) package. ### Managing packages with npm #### Installing packages Any package can be installed using: ``` $ npm install packageName ``` This command installs the package in the current directory under `node_modules` and executables under `node_modules/.bin`. For a system-wide installation global switch `-g` can be used: ``` # npm -g install packageName ``` By default this command installs the package under `/usr/lib/node_modules/npm` and requires root privileges to do so. ##### Allow user-wide installations To allow *global* package installations for the current [user](/index.php/User "User") you want to specify the `--prefix` parameter, e.g.: ``` $ npm -g install packageName --prefix ~/.node_modules ``` This is however **not** recommended since you need to remember the location and give it as the parameter each time you do an operation. Using [environment variables](/index.php/Environment_variables#Per_user "Environment variables") may be a more preferred solution: `~/.profile` ``` PATH="$HOME/.node_modules/bin:$PATH" export npm_config_prefix=~/.node_modules ``` Re-login or *source* to update changes. #### Updating packages Updating packages is as simple as ``` $ npm update packageName ``` For the case of globally installed packages (`-g`) ``` # npm update -g packageName ``` **Note:** Remember that globally installed packages require administrator privileges unless `prefix` is set to a user-writable directory ##### Updating all packages However, sometimes you may just wish to update all packages, either locally or globally. Leaving off the packageName `npm` will attempt to update all packages ``` $ npm update ``` or add the `-g` flag to update globally installed packages ``` # npm update -g ``` #### Removing packages To remove a package installed with the `-g` switch simply use: ``` # npm -g uninstall packageName ``` **Note:** Remember that globally installed packages require administrator privileges to remove a local package drop the switch and run: ``` $ npm uninstall packageName ``` #### Listing packages To show a tree view of the installed globally packages use: ``` $ npm -g list ``` This tree is often quite deep. To only display the top level packages use: ``` $ npm list --depth=0 ``` To display obsolete packages that may need to be updated: ``` $ npm outdated ``` ### Managing packages with pacman Some node.js packages can be found in [Arch User Repository](/index.php/Arch_User_Repository "Arch User Repository") with the name `nodejs-packageName`. ## Troubleshooting ### node-gyp python errors Some node modules use the `node-gyp` utility which does not support Python 3, which in most cases will be the default system-wide Python executable. To resolve such errors, make sure you have [python2](https://www.archlinux.org/packages/?name=python2) installed, then set the default npm Python like so: ``` $ npm config set python /usr/bin/python2 ``` In case of errors like `gyp WARN EACCES user "root" does not have permission to access the ... dir`, `--unsafe-perm` option might help: ``` # npm install --unsafe-perm -g node-inspector ``` ### Cannot find module ... errors Since npm 5.x.x. package-lock.json file is generated along with the package.json file. Conflictions may arise when the two files refer to different package versions. A temporary method to solving this problem has been: ``` $ rm package-lock.json $ npm install ``` However, fixes were made after npm 5.1.0 or above. For further information, see: [missing dependencies](https://github.com/npm/npm/pull/17508) ## Additional resources For further information on Node.js and the use of its official package manager NPM you may wish to consult the following external resources * [Node.js documentation](https://nodejs.org/en/docs/) * [NPM documentation](https://docs.npmjs.com/) * IRC channel #node.js on irc.freenode.net