How do we or can we use node modules via npm with Meteor?

How do we or can we use node modules via npm with Meteor?

Or is that something that will be dependent on the packaging API?

Or is there a prescribed method that is recommended?

As of v0.6.0, Meteor integrates directly with NPM modules. For example, to use a module like ws,

  1. Run sudo npm install -g ws (or for local installs, see this)
  2. In your sever JavaScript file,

    var Websocket = Npm.require('ws');
    var myws = new Websocket('url');
    

To use a core Node module, just make the corresponding Npm.require() call, e.g. var Readable = Npm.require('stream').Readable.


You can use any of the more than 30,000 NPM modules directly with Meteor thanks to the NPM package developed by Arunoda.

You can also define dependencies on Npm packages from smart packages - from the initial announcement of npm support:

Now your smart package can define dependencies directly, by adding a call to Npm.depends in package.js:

Npm.depends({
  "awssum": "0.12.2",
  "underscore.string": "2.3.1"
});

All of this works well with hot code reload, just like the rest of Meteor. When you make changes, the bundler will automatically download missing npm packages and re-pin its dependencies.

To use an NPM module within server code, use Npm.require as you would normally use plain require. Notably, __meteor_bootstrap__.require has been eliminated and all of its uses have been converted to Npm.require.

There is a small example of using an NPM module in your application.

Note that this answer applies to versions of Meteor prior to 0.6.0, which was released in April 2013 and added direct npm integration

Install modules as you normally would through npm and then use

var require = __meteor_bootstrap__.require,
    pd = require("pd"),
    after = require("after") // etc

Load any modules you want

I did a complete write-up on this on Meteorpedia:

http://www.meteorpedia.com/read/npm

The article covers how to use npm in both your app and/or packages, and common patterns for wrapping regular callbacks and event emmitter callbacks to work properly in Meteor and Fibers, and include's references to Arunoda's async-utilities and additional resources.

You could use the Meteor Npm package

meteor add meteorhacks:npm

Then create a packages.json file in your project's root directory with the NPM module's info.

{
    "redis": "0.8.2",
     "github": "0.1.8"
}

Then as simple as (server side)

var github = Meteor.npmRequire("github");
var redis = Meteor.npmRequire("redis");

So you just use Meteor.npmRequire instead of require

I wrote a Gist on how to do this as of Meteor 0.6.5, How to add Node.js npms to your Meteor.js project.

I am using such a script which nicely install all Node.js dependencies. It behaves similar to the official support in the Meteor engine branch (it installs dependencies at runtime), but it also supports installing from Git repositories and similar goodies.