Sei sulla pagina 1di 13

Creating RPMs for Node.

js and NPM on Fedora

Creating RPMs for Node.js and


NPM on Fedora
Finnbarr P. Murphy
(fpm@fpmurphy.com)

While JavaScript engines and shells have been available outside of the browser for many years, it
was really only when Google released their V8 JavaScript engine in 2008 that the much of the
software development world started to wake up to the possibilities of using JavaScript as a

ly
standalone server-side scripting language.

on
As a result, a number of JavaScript toolkits and application frameworks based on V8 have emerged
in the last couple of years including Node.js, EJScript, Firecat and Appweb. Another impetus for
such toolkits and frameworks is the fact that in recent years JavaScript has become faster and
more efficient than many of the other popular scripting languages for non platform dependant

se
tasks and is well on its way to becoming a major universal scripting language.

The stated goal of Node,js is to provide an easy way to build scalable network applications. It
lu
includes many useful JavaScript libraries to access to the network and underlying filesystem.
However its key feature is evented I/O. Node.js takes the approach that all I/O should be
non-blocking. This means that HTTP requests, database queries, file I/O and suchlike do not block.
They are asynchronous, run independently and emit an event when necessary via callbacks.
a
nn

A whole collection of libraries and application frameworks has emerged based on Node.js. Check
out the github Node.js page which lists many of the popular Node.js libraries (AKA modules.) This
has lead to the development of a number of package managers for Node.js packages including
NPM, SeedJS and Kiwi.
o
rs

NPM (Node.js Package Manager) is currently the defacto package manager for Node.js. It is a
command line tool for installing, updating and managing Node.js packages. It works much like the
Ruby (RubyGems), Perl and Python package managers in that it does not use the underlying
pe

platform package manager. Instead it maintains its own package repository.

A NPM package is:


r

● A folder (a) containing a program or library described by a package.json file


Fo

● A gzipped tarball (b) containing the folder (a)


● A URL (c) that resolves to (b)
● A @ (d) that is published on the registry with (c)
● A @ (e) that points to (d)
● A that has a “latest” tag satisfying (e)

Currently there are no official Fedora RPMs for node.JS or NPM. There are some experimental
RPMs but I found them all to be deficient in one way or another. This post will show you how to
build what I consider to be suitable RPMs for use on Fedora platforms.

However, first of all, let me show you a typical example of installing node.JS using a shell script:

wget http://nodejs.org/dist/node-v0.2.5.tar.gz
tar xvf node-v0.2.5.tar.gz
cd node-v0.2.5

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 1/13


Creating RPMs for Node.js and NPM on Fedora

./configure
make
sudo make install

Here is a list of the files that make install installs:

* installing deps/libeio/eio.h as /usr/local/include/node/eio.h


* installing deps/v8/include/v8-profiler.h as /usr/local/include/node/v8-profiler.h
* installing deps/v8/include/v8-debug.h as /usr/local/include/node/v8-debug.h
* installing deps/v8/include/v8.h as /usr/local/include/node/v8.h
* installing deps/libev/ev.h as /usr/local/include/node/ev.h
* installing build/default/config.h as /usr/local/include/node/config.h
* installing src/node.h as /usr/local/include/node/node.h

ly
* installing src/node_object_wrap.h as /usr/local/include/node/node_object_wrap.h
* installing src/node_buffer.h as /usr/local/include/node/node_buffer.h
* installing src/node_events.h as /usr/local/include/node/node_events.h

on
* installing src/node_version.h as /usr/local/include/node/node_version.h
* installing doc/node.1 as /usr/local/share/man/man1/node.1
* installing bin/node-waf as /usr/local/bin/node-waf
* installing bin/node-repl as /usr/local/bin/node-repl
* installing tools/wafadmin/Build.py as /usr/local/lib/node/wafadmin/Build.py

se
* installing tools/wafadmin/Constants.py as /usr/local/lib/node/wafadmin/Constants.py
* installing tools/wafadmin/py3kfixes.py as /usr/local/lib/node/wafadmin/py3kfixes.py
* installing tools/wafadmin/Task.py as /usr/local/lib/node/wafadmin/Task.py
* installing tools/wafadmin/Scripting.py as /usr/local/lib/node/wafadmin/Scripting.py
* installing
lu
tools/wafadmin/Configure.py as /usr/local/lib/node/wafadmin/Configure.py
* installing tools/wafadmin/Options.py as /usr/local/lib/node/wafadmin/Options.py
* installing tools/wafadmin/Runner.py as /usr/local/lib/node/wafadmin/Runner.py
* installing tools/wafadmin/ansiterm.py as /usr/local/lib/node/wafadmin/ansiterm.py
a
* installing tools/wafadmin/__init__.py as /usr/local/lib/node/wafadmin/__init__.py
* installing tools/wafadmin/Environment.py as /usr/local/lib/node/wafadmin/Environment.py
nn

* installing tools/wafadmin/TaskGen.py as /usr/local/lib/node/wafadmin/TaskGen.py


* installing tools/wafadmin/pproc.py as /usr/local/lib/node/wafadmin/pproc.py
* installing tools/wafadmin/Utils.py as /usr/local/lib/node/wafadmin/Utils.py
* installing tools/wafadmin/Logs.py as /usr/local/lib/node/wafadmin/Logs.py
o

* installing tools/wafadmin/Node.py as /usr/local/lib/node/wafadmin/Node.py


* installing tools/wafadmin/Tools/config_c.py as /usr/local/lib/node/wafadmin/Tools/config
rs

_c.py
* installing tools/wafadmin/Tools/icc.py as /usr/local/lib/node/wafadmin/Tools/icc.py
* installing tools/wafadmin/Tools/gxx.py as /usr/local/lib/node/wafadmin/Tools/gxx.py
pe

* installing tools/wafadmin/Tools/nasm.py as /usr/local/lib/node/wafadmin/Tools/nasm.py


* installing tools/wafadmin/Tools/dmd.py as /usr/local/lib/node/wafadmin/Tools/dmd.py
* installing tools/wafadmin/Tools/suncc.py as /usr/local/lib/node/wafadmin/Tools/suncc.py
* installing tools/wafadmin/Tools/gas.py as /usr/local/lib/node/wafadmin/Tools/gas.py
* installing tools/wafadmin/Tools/gcc.py as /usr/local/lib/node/wafadmin/Tools/gcc.py
r

* installing tools/wafadmin/Tools/compiler_d.py as /usr/local/lib/node/wafadmin/Tools/comp


Fo

iler_d.py
* installing tools/wafadmin/Tools/gob2.py as /usr/local/lib/node/wafadmin/Tools/gob2.py
* installing tools/wafadmin/Tools/suncxx.py as /usr/local/lib/node/wafadmin/Tools/suncxx.p
y
* installing tools/wafadmin/Tools/misc.py as /usr/local/lib/node/wafadmin/Tools/misc.py
* installing tools/wafadmin/Tools/node_addon.py as /usr/local/lib/node/wafadmin/Tools/node
_addon.py
* installing tools/wafadmin/Tools/cc.py as /usr/local/lib/node/wafadmin/Tools/cc.py
* installing tools/wafadmin/Tools/d.py as /usr/local/lib/node/wafadmin/Tools/d.py
* installing tools/wafadmin/Tools/xlcxx.py as /usr/local/lib/node/wafadmin/Tools/xlcxx.py
* installing tools/wafadmin/Tools/__init__.py as /usr/local/lib/node/wafadmin/Tools/__init
__.py
* installing tools/wafadmin/Tools/ar.py as /usr/local/lib/node/wafadmin/Tools/ar.py
* installing tools/wafadmin/Tools/gdc.py as /usr/local/lib/node/wafadmin/Tools/gdc.py
* installing tools/wafadmin/Tools/libtool.py as /usr/local/lib/node/wafadmin/Tools/libtool.
py
* installing tools/wafadmin/Tools/osx.py as /usr/local/lib/node/wafadmin/Tools/osx.py
* installing tools/wafadmin/Tools/python.py as /usr/local/lib/node/wafadmin/Tools/python.p
y

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 2/13


Creating RPMs for Node.js and NPM on Fedora

* installing tools/wafadmin/Tools/icpc.py as /usr/local/lib/node/wafadmin/Tools/icpc.py


* installing tools/wafadmin/Tools/gnu_dirs.py as /usr/local/lib/node/wafadmin/Tools/gnu_di
rs.py
* installing tools/wafadmin/Tools/cxx.py as /usr/local/lib/node/wafadmin/Tools/cxx.py
* installing tools/wafadmin/Tools/intltool.py as /usr/local/lib/node/wafadmin/Tools/intlto
ol.py
* installing tools/wafadmin/Tools/compiler_cxx.py as /usr/local/lib/node/wafadmin/Tools/co
mpiler_cxx.py
* installing tools/wafadmin/Tools/unittestw.py as /usr/local/lib/node/wafadmin/Tools/unitt
estw.py
* installing tools/wafadmin/Tools/xlc.py as /usr/local/lib/node/wafadmin/Tools/xlc.py
* installing tools/wafadmin/Tools/ccroot.py as /usr/local/lib/node/wafadmin/Tools/ccroot.p
y
* installing tools/wafadmin/Tools/preproc.py as /usr/local/lib/node/wafadmin/Tools/preproc.
py
* installing tools/wafadmin/Tools/winres.py as /usr/local/lib/node/wafadmin/Tools/winres.p

ly
y
* installing tools/wafadmin/Tools/compiler_cc.py as /usr/local/lib/node/wafadmin/Tools/com
piler_cc.py

on
* installing build/default/node as /usr/local/bin/node
* installing build/default/src/node_config.h as /usr/local/include/node/node_config.h

There are a number of documented ways to install NPM. Here is one way to download and install

se
NPM:

# curl http://npmjs.org/install.sh | sh
lu
node cli.js cache clean
npm info it worked if it ends with ok
npm info using npm@0.2.12-1
a
npm info using node@v0.2.5
npm ERR! sudon't!
nn

npm ERR! sudon't! Running npm as root is not recommended!


npm ERR! sudon't! Seriously, don't do this!
npm ERR! sudon't!
npm ok
o

node cli.js rm npm


npm info it worked if it ends with ok
rs

npm info using npm@0.2.12-1


npm info using node@v0.2.5
npm ERR! sudon't!
pe

npm ERR! sudon't! Running npm as root is not recommended!


npm ERR! sudon't! Seriously, don't do this!
npm ERR! sudon't!
npm info not installed npm
npm ok
r

node cli.js install npm


Fo

npm info it worked if it ends with ok


npm info using npm@0.2.12-1
npm info using node@v0.2.5
npm ERR! sudon't!
npm ERR! sudon't! Running npm as root is not recommended!
npm ERR! sudon't! Seriously, don't do this!
npm ERR! sudon't!
npm info fetch http://registry.npmjs.org/npm/-/npm-0.2.12-1.tgz
npm info calculating sha1 /tmp/npm-1292470427494/1292470427888-0.6498551466502249/tmp.tgz
npm info shasum a6a1d796735ac94fac62152e1b610b0041317703
npm info calculating sha1 /usr/local/lib/node/.npm/.cache/npm/0.2.12-1/package.tgz
npm info shasum 7c6c1c89a1b74333fe00d25d43ce4d2655a6bc7b
npm info preinstall npm@0.2.12-1
npm info install npm@0.2.12-1
npm info postinstall npm@0.2.12-1

Thanks for installing version 0.2.12-1 of npm.

Last few items from the changelog:

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 3/13


Creating RPMs for Node.js and NPM on Fedora

shasums on all tarballs


More portable tar option usage
Much beefed up bundle command
Deep view command

* 0.2.10:
npm edit command
various stability bugfixes.

* 0.2.11:
~> and 1.2.x style version ranges
complete tab completion: see `npm help completion` (Evan Meagher)
explore command: see `npm help explore`
docs command: see `npm help docs`
keywords and description in `npm ls`
Frequently asked questions at `npm help faq`

ly
* 0.2.12:
Various bugfixes (0.2.11 was big, broke some stuff)

on
`npm faq` command (wrapper for `npm help faq`)

npm info preactivate npm@0.2.12-1


npm info activate npm@0.2.12-1
npm info postactivate npm@0.2.12-1

se
npm info build Success: npm@0.2.12-1
npm ok
It worked lu
it was installed in /usr/local/bin/npm

As you can see neither Node.js or NPM install in ways that most people are used to on Fedora.
a

I decided to develop separate RPMs for installing Node.js and NPM. I am not, however, going to
nn

discuss how to build RPMs in general. I assume that you already know how to do that if you are
reading this post. If not, there are plenty of good tutorials available of the Internet.
o

The first problem that emerged is that there is an pre-existing package called node for most
GNU/Linux distributions. Unfortunately the lead Node.js developer, Ryan Dahl, insists on calling
rs

his application node. His attitude to this problem is interesting:


pe

I want Node to have the executable name ‘node’. You can contact the author of the
other package and see if they’ll change their name.
r

Ah, the arrogance of youth!


Fo

I, for one, think that Fedora should follow the lead of Debian and rename it to nodejs to avoid
confusion. This is what I have done in the two RPMs that I developed.

As a result of this decision, the executable /usr/bin/node is renamed to /usr/bin/nodejs, scripts


containing shebangs are modified from #!/usr/bin/env node to #!/usr/bin/nodejs and
/usr/lib/nodejs replaces /usr/lib/nodejs. The default NPM configuration options file
../lib/utils/default-config.js is modified to set sane defaults for the Fedora platform, and a global
configuration file /etc/npmrc is created. See the .spec files for details.

I do not see a valid reason for separate 64-bit and 32-bit libraries at this time but the issue may
need revisiting in the future.

Here is the .spec file for node.js

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 4/13


Creating RPMs for Node.js and NPM on Fedora

Name: nodejs
Version: 0.3.1
Release: 1.0
Summary: Node.js
Group: Development/Languages/Other
License: MIT
URL: http://nodejs.org/
Source0: node-v%{version}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: gcc-c++ >= 4.1
BuildRequires: libstdc++-devel
BuildRequires: python
BuildRequires: openssl-devel
Provides: nodejs
Obsoletes: nodejs

ly
%description
Evented I/O for Google V8 JavaScript
%package devel

on
Summary: Node.js development files
Group: Development/Languages/C and C++
Requires: %{name} = %{version}-%{release}
Requires: python
Requires: gcc-c++ >= 4.1

se
%description devel
This package contains files for node.js addons development and build
%clean
rm -rf %{buildroot}
lu
%prep
%setup -q -n node-v%{version}
%build
a
./configure --debug --prefix=%{_prefix}
sed -i -e 's|"lib", "node"|"lib", "nodejs"|' src/node.js
nn

%__make %{?_smp_mflags} CXXFLAGS="%{optflags}" CFLAGS="%{optflags}"


%install
%__make DESTDIR=%{buildroot} install
mv ${RPM_BUILD_ROOT}%{_bindir}/node ${RPM_BUILD_ROOT}%{_bindir}/nodejs
o

mv ${RPM_BUILD_ROOT}%{_bindir}/node_g ${RPM_BUILD_ROOT}%{_bindir}/nodejs_g
mv ${RPM_BUILD_ROOT}%{_includedir}/node ${RPM_BUILD_ROOT}%{_includedir}/nodejs
rs

mv ${RPM_BUILD_ROOT}%{_prefix}/lib/node ${RPM_BUILD_ROOT}%{_prefix}/lib/nodejs
mv ${RPM_BUILD_ROOT}%{_mandir}/man1/node.1 ${RPM_BUILD_ROOT}%{_mandir}/man1/nodejs.1
%files
pe

%defattr(-,root,root,-)
%doc AUTHORS ChangeLog LICENSE
%attr(755,root,root) %{_bindir}/nodejs
%{_mandir}/man1/nodejs.1.gz
%files devel
r

%defattr(-,root,root,-)
# Headers
Fo

%dir %{_includedir}/nodejs
%{_includedir}/nodejs/*
# Debug version of node
%attr(755,root,root) %{_bindir}/nodejs_g
# Package information
%{_prefix}/lib/pkgconfig/nodejs.pc
# Node-waf
%attr(755,root,root) %{_bindir}/node-waf
%dir %{_prefix}/lib/nodejs
%dir %{_prefix}/lib/nodejs/wafadmin
%dir %{_prefix}/lib/nodejs/wafadmin/Tools
%{_prefix}/lib/nodejs/wafadmin/*
%changelog
* Sat Dec 18 2010 Finnbarr P. Murphy <fpm@fpmurphy.com> - 0.3.1
- First release. Contains node.JS v0.3.1

And here is the .spec file for NPM:

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 5/13


Creating RPMs for Node.js and NPM on Fedora

Name: npm
Version: 0.2.9
Release: 1.0
Summary: A package manager for node.js
Group: Development/Libraries/Other
License: MIT
URL: http://npmjs.org/
%define realversion 0.2.9
Source0: npm-v%{realversion}.tar.gz
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root
BuildRequires: nodejs
Requires: nodejs
BuildArch: noarch
%description
NPM is a package manager for node.js.

ly
%prep
%setup -q -n npm-v%{realversion}
%clean

on
rm -rf %{buildroot}
%build
%install
# control the NPM install locations
cat > /var/tmp/npmrc <<NPMRC

se
root = %{buildroot}/usr/lib/nodejs
binroot = %{buildroot}%{_bindir}
manroot = %{buildroot}%{_mandir}
loglevel = verbose
lu
tmpdir = /var/tmp
NPMRC
npm_config_userconfig=/var/tmp/npmrc nodejs cli.js install .
a
rm -f /var/tmp/npmrc
# Replace NPM manpage symlinks with normal files
nn

buildroot_escaped=`echo '%{buildroot}' | sed -e 's/\\//\\\\\\//g'`


realversion_escaped=`echo '%{realversion}' | sed -e 's/\\//\\\\\\//g'`
mandir_escaped=`echo '%{_mandir}' | sed -e 's/\\//\\\\\\//g'`
rm %{buildroot}%{_mandir}/man1/*
o

mv %{buildroot}/usr/lib/nodejs/.npm/npm/%{realversion}/package/man1/npm.1 %{buildroot}%{_m
andir}/man1/npm.1
rs

ls -l %{buildroot}/usr/lib/nodejs/.npm/npm/%{realversion}/package/man1/*.1 | sed -e "s/.*\


/\(.*\)$/cp ${buildroot_escaped}\/usr\/lib\/nodejs\/.npm\/npm\/${realversion_escaped}\/pac
kage\/man1\/\1 ${buildroot_escaped}${mandir_escaped}\/man1\/npm-\1/g" | bash
pe

rm %{buildroot}%{_bindir}/npm
mv %{buildroot}%{_bindir}/npm@%{realversion} %{buildroot}%{_bindir}/npm
rm -r %{buildroot}/usr/lib/nodejs/npm
mv %{buildroot}/usr/lib/nodejs/npm@%{realversion} %{buildroot}/usr/lib/nodejs/npm
rm -f %{buildroot}/usr/lib/nodejs/.npm/npm/%{realversion}/package/.gitignore
r

chmod -x %{buildroot}/usr/lib/nodejs/.npm/npm/%{realversion}/package/test/packages/bindir/
test.js
Fo

# configure NPM defaults in ../libs/utils/default-config.js for Fedora/Redhat/Centos platf


orms
sed -i -e 's|\(^ , root : \)\(.*\)|\1"/usr/lib/nodejs"|' -e 's|\(^ , tmproot : \)\(.*\)|
\1"/var/tmp"|' -e 's|\(^ , manroot : \)\(.*\)|\1"/usr/share/man"|' -e 's|\(^ , binroot :
\)\(.*\)|\1"/usr/bin"|' -e 's|\(^ , globalconfig : \)\(.*\)|\1"/etc/npmrc"|' %{buildroo
t}/usr/lib/nodejs/.npm/npm/%{realversion}/package/lib/utils/default-config.js
# fix up hashbangs to up /usr/bin/nodejs
sed -i -e 's|/usr/bin/env node|/usr/bin/nodejs|' %{buildroot}/usr/bin/npm
sed -i -e 's|/usr/bin/env node|/usr/bin/nodejs|' %{buildroot}/usr/lib/nodejs/.npm/npm/%{re
alversion}/package/lib/utils/write-shim.js
sed -i -e 's|/usr/bin/env node|/usr/bin/nodejs|' %{buildroot}/usr/lib/nodejs/.npm/npm/%{re
alversion}/package/cli.js
# add an /etc/npmrc config file
mkdir -p %{buildroot}/etc
cat > %{buildroot}/etc/npmrc <<NPMRC
root = /usr/lib/nodejs
binroot = /usr/bin
manroot = /usr/share/man

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 6/13


Creating RPMs for Node.js and NPM on Fedora

tmproot = /var/tmp
loglevel = error
NPMRC
%files
%defattr(-,root,root,-)
%exclude /usr/lib/nodejs/.npm/.cache
%dir /usr/lib/nodejs/npm
/usr/lib/nodejs/npm/*
%dir /usr/lib/nodejs/.npm
/usr/lib/nodejs/.npm/*
%attr(755,root,root) %{_bindir}/npm
%{_mandir}/man1/*
/etc/npmrc
%changelog
* Mon Dec 20 2010 Finnbarr P. Murphy <fpm@fpmurphy.com> 0.2.9-1
- Initial RPM packaging of NPM v0.2.9

ly
These RPM packages should not be regarded as production ready as they have not been

on
extensively tested or reviewed. I am not an RPM build expert by any means! I did not create the
above .spec files from scratch. Instead I modified the .spec files for existing RPMs that I found on
OBS (OpenSUSE Build Service). The bRPMs appear to work as intended.

se
If you do not want to build your own RPMs, you can download built RPMs for a number of
platforms them from my project area on OBS. Just pick the project you want (nodejs or NPM)
followed by the build platform (under build status), and you will be taken to the appropriate
lu
download repository. Note Fedora 14 is not yet available as an operational build platform on OBS
as the build hosts need upgrading. However, with Novell being recently sold off to Attachmate
Corporation, I wonder will this ever occur! Meanwhile you can download the two Fedora 14 RPMs
a
for X86_64 platforms from fpmurphy.com.
nn

Here are a list of the files installed by both packages:


o

# rpm -vi nodejs-0.3.1-1.0.x86_64.rpm


Preparing packages for installation...
rs

nodejs-0.3.1-1.0
#
# rpm -ql nodejs
pe

/usr/bin/nodejs
/usr/share/doc/nodejs-0.3.1
/usr/share/doc/nodejs-0.3.1/AUTHORS
/usr/share/doc/nodejs-0.3.1/ChangeLog
/usr/share/doc/nodejs-0.3.1/LICENSE
r

/usr/share/man/man1/nodejs.1.gz
Fo

#
# rpm -vi npm-0.2.9-1.0.noarch.rpm
Preparing packages for installation...
npm-0.2.9-1.0
#
# rpm -ql npm
/etc/npmrc
/usr/bin/npm
/usr/lib/nodejs/.npm
/usr/lib/nodejs/.npm/npm
/usr/lib/nodejs/.npm/npm/0.2.9
/usr/lib/nodejs/.npm/npm/0.2.9/package
/usr/lib/nodejs/.npm/npm/0.2.9/package/.npmignore
/usr/lib/nodejs/.npm/npm/0.2.9/package/LICENSE
/usr/lib/nodejs/.npm/npm/0.2.9/package/Makefile
/usr/lib/nodejs/.npm/npm/0.2.9/package/README.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/cli.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/activate.md

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 7/13


Creating RPMs for Node.js and NPM on Fedora

/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/adduser.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/build.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/bundle.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/cache.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/changelog.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/coding-style.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/config.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/deactivate.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/deprecate.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/developers.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/folders.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/future-ideas
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/future-ideas/deploy.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/future-ideas/remote.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/future-ideas/site.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/init.md

ly
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/install.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/json.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/link.md

on
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/list.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/ln.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/ls.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/npm.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/outdated.md

se
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/owner.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/publish.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/rebuild.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/restart.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/rm.md
lu
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/scripts.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/start.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/stop.md
a
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/tag.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/test.md
nn

/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/uninstall.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/unpublish.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/update.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/version.md
o

/usr/lib/nodejs/.npm/npm/0.2.9/package/doc/view.md
/usr/lib/nodejs/.npm/npm/0.2.9/package/html
rs

/usr/lib/nodejs/.npm/npm/0.2.9/package/html/favicon.ico
/usr/lib/nodejs/.npm/npm/0.2.9/package/html/index.html
/usr/lib/nodejs/.npm/npm/0.2.9/package/html/npm-16.png
pe

/usr/lib/nodejs/.npm/npm/0.2.9/package/html/npm-64-square.png
/usr/lib/nodejs/.npm/npm/0.2.9/package/html/npm-fin.png
/usr/lib/nodejs/.npm/npm/0.2.9/package/html/npm-large.png
/usr/lib/nodejs/.npm/npm/0.2.9/package/html/npm.png
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib
r

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/activate.js
Fo

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/adduser.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/autoremove.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/build.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/bundle.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/cache.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/completion.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/config.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/deactivate.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/deprecate.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/help.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/init.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/install.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/link.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/ls.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/outdated.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/owner.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/publish.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/rebuild.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/repl.js

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 8/13


Creating RPMs for Node.js and NPM on Fedora

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/restart.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/start.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/stop.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/tag.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/test.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/uninstall.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/unpublish.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/update-dependents.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/update.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/abbrev.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/async-map.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/base64.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/chain.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/default-config.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/default.npmignore

ly
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/error-handler.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/exec.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/fetch.js

on
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/find.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/get.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/graceful-fs.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/ini-parser.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/ini.js

se
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/lifecycle.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/link.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/load-package-defaults.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/log.js
lu
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/mkdir-p.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/output.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/promise-chain.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/prompt.js
a
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/proto-list.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/read-installed.js
nn

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/read-json.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/adduser.js
o

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/get.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/publish.js
rs

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/request.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/tag.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/registry/unpublish.js
pe

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/relativize.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/rm-rf.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/semver.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/set.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/sha.js
r

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/sys.js
Fo

/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/uuid.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/utils/write-shim.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/version.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/lib/view.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/activate.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/adduser.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/build.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/bundle.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/cache.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/changelog.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/coding-style.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/config.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/deactivate.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/deprecate.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/developers.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/folders.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/future-ideas
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/future-ideas/deploy.1

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 9/13


Creating RPMs for Node.js and NPM on Fedora

/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/future-ideas/remote.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/future-ideas/site.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/init.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/install.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/json.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/link.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/list.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/ln.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/ls.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/outdated.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/owner.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/publish.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/rebuild.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/restart.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/rm.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/scripts.1

ly
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/start.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/stop.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/tag.1

on
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/test.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/uninstall.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/unpublish.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/update.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/version.1

se
/usr/lib/nodejs/.npm/npm/0.2.9/package/man1/view.1
/usr/lib/nodejs/.npm/npm/0.2.9/package/npm-completion.sh
/usr/lib/nodejs/.npm/npm/0.2.9/package/npm.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/scripts
lu
/usr/lib/nodejs/.npm/npm/0.2.9/package/scripts/install.sh
/usr/lib/nodejs/.npm/npm/0.2.9/package/test
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/common.js
a
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/failer
nn

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/failer/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/fast
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/fast/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/slow
o

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/disabled/slow/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages
rs

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bindir
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bindir/bin
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bindir/bin/prog.js
pe

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bindir/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bindir/test.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/blerg
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/blerg/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/blerg/test.js
r

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bundlerecurs
Fo

/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bundlerecurs/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bundletest
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bundletest/foo.js
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/bundletest/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/depends-on-connect
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/depends-on-connect/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/depends-on-jsdom
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/depends-on-jsdom/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/env-reader
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/env-reader/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/test-package
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/packages/test-package/package.json
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/run.sh
/usr/lib/nodejs/.npm/npm/0.2.9/package/test/update-test.sh
/usr/lib/nodejs/.npm/npm/active
/usr/lib/nodejs/npm
/usr/lib/nodejs/npm/activate.js
/usr/lib/nodejs/npm/adduser.js
/usr/lib/nodejs/npm/autoremove.js

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 10/13


Creating RPMs for Node.js and NPM on Fedora

/usr/lib/nodejs/npm/build.js
/usr/lib/nodejs/npm/bundle.js
/usr/lib/nodejs/npm/cache.js
/usr/lib/nodejs/npm/completion.js
/usr/lib/nodejs/npm/config.js
/usr/lib/nodejs/npm/deactivate.js
/usr/lib/nodejs/npm/deprecate.js
/usr/lib/nodejs/npm/help.js
/usr/lib/nodejs/npm/index.js
/usr/lib/nodejs/npm/init.js
/usr/lib/nodejs/npm/install.js
/usr/lib/nodejs/npm/link.js
/usr/lib/nodejs/npm/ls.js
/usr/lib/nodejs/npm/outdated.js
/usr/lib/nodejs/npm/owner.js
/usr/lib/nodejs/npm/publish.js

ly
/usr/lib/nodejs/npm/rebuild.js
/usr/lib/nodejs/npm/repl.js
/usr/lib/nodejs/npm/restart.js

on
/usr/lib/nodejs/npm/start.js
/usr/lib/nodejs/npm/stop.js
/usr/lib/nodejs/npm/tag.js
/usr/lib/nodejs/npm/test.js
/usr/lib/nodejs/npm/uninstall.js

se
/usr/lib/nodejs/npm/unpublish.js
/usr/lib/nodejs/npm/update-dependents.js
/usr/lib/nodejs/npm/update.js
/usr/lib/nodejs/npm/utils
/usr/lib/nodejs/npm/utils/abbrev.js
lu
/usr/lib/nodejs/npm/utils/async-map.js
/usr/lib/nodejs/npm/utils/base64.js
/usr/lib/nodejs/npm/utils/chain.js
a
/usr/lib/nodejs/npm/utils/default-config.js
/usr/lib/nodejs/npm/utils/default.js
nn

/usr/lib/nodejs/npm/utils/error-handler.js
/usr/lib/nodejs/npm/utils/exec.js
/usr/lib/nodejs/npm/utils/fetch.js
/usr/lib/nodejs/npm/utils/find.js
o

/usr/lib/nodejs/npm/utils/get.js
/usr/lib/nodejs/npm/utils/graceful-fs.js
rs

/usr/lib/nodejs/npm/utils/ini-parser.js
/usr/lib/nodejs/npm/utils/ini.js
/usr/lib/nodejs/npm/utils/lifecycle.js
pe

/usr/lib/nodejs/npm/utils/link.js
/usr/lib/nodejs/npm/utils/load-package-defaults.js
/usr/lib/nodejs/npm/utils/log.js
/usr/lib/nodejs/npm/utils/mkdir-p.js
/usr/lib/nodejs/npm/utils/output.js
r

/usr/lib/nodejs/npm/utils/promise-chain.js
Fo

/usr/lib/nodejs/npm/utils/prompt.js
/usr/lib/nodejs/npm/utils/proto-list.js
/usr/lib/nodejs/npm/utils/read-installed.js
/usr/lib/nodejs/npm/utils/read-json.js
/usr/lib/nodejs/npm/utils/registry
/usr/lib/nodejs/npm/utils/registry.js
/usr/lib/nodejs/npm/utils/registry/adduser.js
/usr/lib/nodejs/npm/utils/registry/get.js
/usr/lib/nodejs/npm/utils/registry/publish.js
/usr/lib/nodejs/npm/utils/registry/request.js
/usr/lib/nodejs/npm/utils/registry/tag.js
/usr/lib/nodejs/npm/utils/registry/unpublish.js
/usr/lib/nodejs/npm/utils/relativize.js
/usr/lib/nodejs/npm/utils/rm-rf.js
/usr/lib/nodejs/npm/utils/semver.js
/usr/lib/nodejs/npm/utils/set.js
/usr/lib/nodejs/npm/utils/sha.js
/usr/lib/nodejs/npm/utils/sys.js
/usr/lib/nodejs/npm/utils/uuid.js

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 11/13


Creating RPMs for Node.js and NPM on Fedora

/usr/lib/nodejs/npm/utils/write-shim.js
/usr/lib/nodejs/npm/version.js
/usr/lib/nodejs/npm/view.js
/usr/share/man/man1/npm-activate.1.gz
/usr/share/man/man1/npm-adduser.1.gz
/usr/share/man/man1/npm-build.1.gz
/usr/share/man/man1/npm-bundle.1.gz
/usr/share/man/man1/npm-cache.1.gz
/usr/share/man/man1/npm-changelog.1.gz
/usr/share/man/man1/npm-coding-style.1.gz
/usr/share/man/man1/npm-config.1.gz
/usr/share/man/man1/npm-deactivate.1.gz
/usr/share/man/man1/npm-deprecate.1.gz
/usr/share/man/man1/npm-developers.1.gz
/usr/share/man/man1/npm-folders.1.gz
/usr/share/man/man1/npm-init.1.gz

ly
/usr/share/man/man1/npm-install.1.gz
/usr/share/man/man1/npm-json.1.gz
/usr/share/man/man1/npm-link.1.gz

on
/usr/share/man/man1/npm-list.1.gz
/usr/share/man/man1/npm-ln.1.gz
/usr/share/man/man1/npm-ls.1.gz
/usr/share/man/man1/npm-outdated.1.gz
/usr/share/man/man1/npm-owner.1.gz

se
/usr/share/man/man1/npm-publish.1.gz
/usr/share/man/man1/npm-rebuild.1.gz
/usr/share/man/man1/npm-restart.1.gz
/usr/share/man/man1/npm-rm.1.gz
/usr/share/man/man1/npm-scripts.1.gz
lu
/usr/share/man/man1/npm-start.1.gz
/usr/share/man/man1/npm-stop.1.gz
/usr/share/man/man1/npm-tag.1.gz
a
/usr/share/man/man1/npm-test.1.gz
/usr/share/man/man1/npm-uninstall.1.gz
nn

/usr/share/man/man1/npm-unpublish.1.gz
/usr/share/man/man1/npm-update.1.gz
/usr/share/man/man1/npm-version.1.gz
/usr/share/man/man1/npm-view.1.gz
o

/usr/share/man/man1/npm.1.gz
rs

Here is a simple program to test the Node.js installation. It simply outputs the contents of the
NPM global configuration file /etc/npmrc
pe

~
To test NPM, you could, for example, install the expressjs application framework for Node.js:
r

# npm ls installed
Fo

npm@0.2.9 =isaacs active installed


npm ok
# npm install express
npm ok
# npm ls installed
connect@0.5.0 =creationix =tjholowaychuk active installed latest remote
express@1.0.0 =tjholowaychuk active installed latest remote
npm@0.2.9 =isaacs active installed
npm ok
#

Here is the usual Hello World application using the express framework. You can use it to check
that NPM correctly installed the express package and the dependency package connect and that
Node.js can actually use them.

#!/usr/bin/nodejs

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 12/13


Creating RPMs for Node.js and NPM on Fedora

var express = require('express');


var app = express.createServer();
app.get('/', function(req, res){
res.send('Hello World');
});
app.listen(3000);
console.log('Express server started on port %s', app.address().port);

In summary, it is possible to package Node.js and NPM in a manner that is consistent with the
Fedora packaging guidelines. Server-side JavaScript implementations such as Node.js are an
emerging technology which should be made available to users of Fedora and downstream
distributions via the standard RPM package mechanism.

ly
on
se
a lu
o nn
rs
pe
r
Fo

02-25-2011 Copyright 2004-2011 Finnbarr P. Murphy. All rights reserved. 13/13

Potrebbero piacerti anche