Use npm in Meteor packages
meteor, npm
Solution
You should be grouping all `Npm.require`s at the end of your `package.js` file.
For `future-npm`. You don't need `Npm.depends` in `package.js`, Silly. It's already included in meteor.. just `Npm.require` somewhere and you're good to go. To do that:
Don't be ambiguous with the `package.js` name. Use the `trepafi:package.js` instead.
You don't need `package.json`.. `Npm.depends` has got you covered.
Remove this: `api.addFiles(['package.js'], ['client']);` as it looks like a circular dependency.. Yo dawg i herd you liek package.js in you package.js.. not cool, Xzibit.
And since Npm.require only works server-side, you need to include `trepafi:package.js` as server-side. e.g:
`api.addFiles(['trepafi:package.js'], ['server']);`
So your structure should at least be:
trepafi:package/
- package.js
- trepafi:package.js
- <other files..>
You don't need package.json for `Future`.. it's already included with Meteor.
Your `package.js` should look like:
Package.describe({
name: 'trepafi:package',
summary: '',
version: '0.0.3',
git: 'https://github.com/trepafi/meteor-package.git'
});
Package.onUse(function(api) {
api.versionsFrom('METEOR@1.0');
api.use(['tracker', 'underscore','meteor'], ['client']);
api.addFiles(['trepafi:package.js'], ['server']);
api.export('Package', ['client']);
});
//if you really need Npm.depends:
Npm.depends({
'prerender-node': '1.0.6',
'send' : '0.10.1'
});
// we don't need no package.json
Your `trepafi:package.js` should look like:
var Future = Npm.require('future');
var future = new Future();
// use your future to make Doc Brown proud.
var useFuture = function(asyncFunc) { //expects function with callback somewhere
asyncFunc(function(err, result) {
if(err) future.throw("OMG something went wrong!");
else return future.return(result);
});
return future.wait();
};
Meteor.startup(function() {
//something
});
READ:
Notable changes in `package.js` are `versionsFrom` and `api.use` now has `meteor` added to it.
Good luck!
Problem
Was trying to figure out the way to load a npm package into a Meteor one. Specifically I tried with `future-npm` I've tried to do this: ``` Package.describe({ summary: "Blah blah", version: '0.0.1' }); Npm.depends({future: "2.3.1"}); Package.onUse(function (api) { api.addFiles('lubert.js', 'server'); api.export('Lubert'); }); ``` Unfortunately I got the following console error ``` Uncaught ReferenceError: Npm is not defined ``` I've read the documentation and there is nothing about to load any dependency What am I doing wrong? Update 2: My package.js looks like ``` Package.describe({ name: 'trepafi:package', summary: '', version: '0.0.3', git: 'https://github.com/trepafi/meteor-package.git' }); Npm.depends({ "future": "2.3.1" }); Package.onUse(function(api) { api.versionsFrom('1.0'); api.use(['tracker', 'underscore'], ['client']); api.addFiles(['package.js'], ['client']); api.export('Package', ['client']); }); ``` Update 1: My package.json looks like ``` { "name": "trepafi-package", "version": "0.0.3", "description": "Package for Meteor", "repository": { "type": "git", "url": "https://github.com/trepafi/meteor-package.git" }, "author": "Lubert Palacios", "license": "MIT", "homepage": "https://github.com/trepafi/meteor-package", "dependencies": { "future": "^2.3.1" } } ``` I've also tried with meteorhacks:npm without success. It'd be nice if I can use a "native" way