This module allows you to install Node.js and NPM. This module is published on the Puppet Forge as willdurand/nodejs.
NOTE: the master branch is used for puppet-nodejs 2.x which will be rewritten completly in the next time. When creating PRs then please open them for the 1.9
branch.
NOTE: the puppet-wget
package is required until 1.9.1
. In 1.9.2
the dependency has been removed in order to provide proper strict_vars
support.
This modules depends on puppetlabs/stdlib. 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
For Redhat based OS, the following are (typical) additional requirements:
git clone git://github.com/treydock/puppet-gpg_key.git modules/gpg_key
puppet module install willdurand/nodejs
mod 'willdurand/nodejs', '1.x.x'
There are a few ways to use this puppet module. The easiest one is just using the class definition:
class { 'nodejs':
version => 'v0.10.25',
}
This will compile and install Node.js version v0.10.25
to your machine. node
and npm
will be available in your $PATH
via /usr/local/node/node-default/bin
so you can just start using node
.
Shortcuts are provided to easily install the latest
or stable
release by setting the version
parameter to latest
or stable
. It will automatically look for the last release available on http://nodejs.org.
class { 'nodejs':
version => 'stable',
}
To use the pre-built installer version provided via http://nodejs.org/download you have to set make_install
to false
class { 'nodejs':
version => 'stable',
make_install => false,
}
Due to infrastructures with slower connections the download of the nodejs binaries should be configurable:
::Nodejs::Install::Download {
timeout => 300
}
class { '::nodejs':
make_install => false,
}
If you need more than one installed version of Node.js on your machine, you can just do it using the nodejs::install
puppet define.
nodejs::install { 'v0.10.17':
version => 'v0.10.17',
}
nodejs::install { 'v0.10.25':
version => 'v0.10.25',
}
This snippet will install version v0.10.17
and v0.10.25
on your machine. Keep in mind that a Node.js version installed via nodejs::install
will provide only versioned binaries inside /usr/local/bin
!
/usr/local/bin/node-v0.10.17
/usr/local/bin/node-v0.10.25
By default, this module creates a symlink for the node binary (and npm) with Node.js version appended into /usr/local/bin
e.g. /usr/local/bin/node-v0.10.17
.
All parameters available in the class
definition are also available for nodejs::install
.
NPM symlinks cannot be created since every npm instance would use the default node interpreter which may cause errors. If you'd like to use another npm interpreter, please do something like this:
/usr/local/node/node-vx.x/bin/node /usr/local/node/node-vx.x/bin/npm run your_command
For 2.x it is planned to use NVM and refactor the whole nodejs installer (See #119
It is also possible to remove those versions again:
::nodejs::install { 'node-v5.4':
ensure => absent,
version => 'v5.4.1',
}
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.
When attempting to remove the default instance this can be only done when having the ::nodejs
class NOT defined as otherwise duplicate resource
errors would occur.
After that no new default instance will be configured.
The environment variable $NODE_PATH can be configured using the init
manifest:
class { '::nodejs':
version => 'latest',
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 => 'stable',
target_dir => '/bin',
}
Also, this module installs NPM by default. Since versions v0.6.3
of Node.js npm
is included in every installation! For older versions, you can set parameter with_npm => false
to not install npm
.
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 => 'stable'
}
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
install_opt => '-x -y -z', # options passed to the "npm install" cmd, optional
remove_opt => '-x -y -z', # options passed to the "npm remove" cmd (in case of ensure => absent), optional
exec_as_user => 'vagrant', # exec user, optional
directory => '/target/directory', # target directory
}
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_as_user => 'vagrant',
install_opt => '-x -y -z',
}
When your puppet agent is behind a web proxy, export the http_proxy
environment variable:
export http_proxy=http://myHttpProxy:8888
Install the dependencies using Bundler:
BUNDLE_GEMFILE=.gemfile bundle install
Run the following command:
BUNDLE_GEMFILE=.gemfile bundle exec rake test
- William Durand william.durand1@gmail.com
- Johannes Graf (@grafjo)
puppet-nodejs is released under the MIT License. See the bundled LICENSE file for details.