This module allows you to install Node.js and NPM. This module is published on the Puppet Forge as willdurand/nodejs.
The 1.9 branch accepts patches to fix issues due to the BC breaks from 2.0, however NO active development will be done in 1.9 anymore.
If you need the docs for 1.x, see 1.9.
This modules depends on puppetlabs/stdlib and puppetlabs/gcc. So all repositories have to be checked out:
git clone git://github.com/willdurand/puppet-nodejs.git modules/nodejs
git clone git://github.com/puppetlabs/puppetlabs-stdlib.git modules/stdlib
git clone git://github.com/puppetlabs/puppetlabs-gcc.git modules/gccFor Redhat based OS, the following are (typical) additional requirements:
git clone git://github.com/treydock/puppet-gpg_key.git modules/gpg_keypuppet module install willdurand/nodejs
mod 'willdurand/nodejs', '2.x.x'
There are a few ways to use this puppet module. The easiest one is just using the class definition:
class { 'nodejs':
version => 'v6.0.0',
}This install the precompiled Node.js version v6.0.0 on your machine. node and npm will be available in your $PATH at /usr/local/bin so you can just start using node.
Shortcuts are provided to easily install the latest release or the latest LTS release (lts) by setting the version parameter to latest or lts. It will automatically look for the last release available on https://nodejs.org.
# installs the latest nodejs version
class { 'nodejs':
version => 'latest',
}# installs the latest nodejs LTS version
class { 'nodejs':
version => 'lts',
}In order to compile from source with gcc, the make_install must be true.
class { 'nodejs':
version => 'lts',
make_install => true,
}Instead of fixing one specific nodejs version it's also possible to tell this module whether to use the latest of a certain minor release:
class { '::nodejs':
version => '6.3',
}This will install the latest patch release of 6.3.x.
The same is possible with major releases:
class { '::nodejs':
version => '6.x',
}This will install the latest 6.x release.
Due to infrastructures with slower connections the download of the nodejs binaries should be configurable:
class { '::nodejs':
download_timeout => 0,
}If you need more than one installed version of Node.js on your machine, you can just configure them using the instances list.
class { '::nodejs':
version => 'v6.0.0',
instances => {
"node-v6" => {
version => 'v6.0.0'
},
"node-v5" => {
version => 'v5.0.0'
}
},
}This will install the node version v5.0.0 and v6.0.0 on your machine with v6.0.0 as default and v5.0.0 as versioned binary in /usr/local/bin:
/usr/local/bin/node # v6.0.0
/usr/local/bin/node-v6.0.0
/usr/local/bin/npm-v6.0.0
/usr/local/bin/npm # NPM shipped with v6.0.0
/usr/local/bin/npm-v5.0.0
/usr/local/bin/npm-v5.0.0
It is also possible to remove those versions again:
class { '::nodejs':
# ...
instances_to_remove => ['5.4'],
}After the run the directory /usr/local/node/node-v5.4.1 has been purged. The link /usr/local/bin/node-v5.4.1 is also purged.
Note: It is not possible to install and uninstall an instance in the same run. The version defined in the version parameter of the nodejs class can't be removed in the same run. If a version should be removed, it must not be present in the instances list.
By default, all available cpu (that are detected using the ::processorcount fact) cores are being used to compile nodejs. Set cpu_cores to any number of cores you want to use.
class { 'nodejs':
version => 'lts',
cpu_cores => 2,
}The environment variable $NODE_PATH can be configured using the init manifest:
class { '::nodejs':
version => 'lts',
node_path => '/your/custom/node/path',
}It is not possible to adjust a $NODE_PATH through ::nodejs::install.
node and npm are linked to /usr/local/bin to be available in your system $PATH by default. To link those binaries to e.g /bin, just set the parameter target_dir.
class { 'nodejs':
version => 'lts',
target_dir => '/bin',
}Also, this module installs NPM by default.
This module adds a new provider: npm. You can use it as usual:
package { 'express':
provider => npm
}Note: When deploying a new machine without nodejs already installed, your npm package definition requires the nodejs class:
class { 'nodejs':
version => 'lts'
}
package { 'express':
provider => 'npm',
require => Class['nodejs']
}The nodejs installer can be used if a npm package should not be installed globally, but in a certain directory.
There are two approaches how to use this feature:
::nodejs::npm { 'npm-webpack':
ensure => present, # absent would uninstall this package
pkg_name => 'webpack',
version => 'x.x', # optional
options => '-x -y -z', # CLI options passed to the "npm install" cmd, optional
exec_user => 'vagrant', # exec user, optional
directory => '/target/directory', # target directory
home_dir => '/home/vagrant', # home directory of the user which runs the installation (vagrant in this case)
}This would install the package webpack into /target/directory with version x.x.
::nodejs::npm { 'npm-install-dir':
list => true, # flag to tell puppet to execute the package.json file
directory => '/target',
exec_user => 'vagrant',
options => '-x -y -z',
}When your puppet agent is behind a web proxy, export the http_proxy environment variable:
export http_proxy=http://myHttpProxy:8888As discussed in willdurand/composer#44 each module should get a build_deps parameter which can be used in edge cases in order to turn the package setup of this module off:
class { '::nodejs':
build_deps => false,
}In this case you'll need to take care of the following packages:
tarrubywgetsemver(GEM used by ruby)make(ifmake_install=true)gcccompiler (ifmake_install=true)
If you're using nix as dependency manager, you can create a custom shell which contains all dependencies declared in Gemfile.lock by running nix-shell in the root directory.
Install the dependencies using Bundler:
bundle install
Run the following command:
bundle exec rake test
- William Durand william.durand1@gmail.com
- Johannes Graf (@grafjo)
- Maximilian Bosch (@Ma27)
puppet-nodejs is released under the MIT License. See the bundled LICENSE file for details.
