It is possible to use node.js packages within Meteor as described here, however as require
is not defined globally, packages having transitive dependencies (as for example xml2js or aws-lib) break with
ReferenceError: require is not defined
Any ideas on how to fix or work around this issue without altering the libraries?
I followed the instructions from your linked question. I used the node-xml2js library to test this with the test fixture from the code base and achieved it in the following way.
Meteor.startup(function () {
// This solves the issue
var require = __meteor_bootstrap__.require;
// The example from node-xml2js readme
var fs = require('fs'),
xml2js = require('xml2js');
var parser = new xml2js.Parser();
fs.readFile('/home/prashant/order.xml', 'utf8', function(err, data) {
parser.parseString(data, function (err, result) {
console.log(result);
console.log('Done');
});
});
});
I think the key was to define a variable require
and assign it to Meteor's require function. When Meteor loads the server assets, it also loads require
and solves the problem of the transitive dependency. I made no changes to the node-xml2js library.
Hope this helps!
In the latest version of Meteor (0.6.3, and presumably onwards), you need to use Npm.require()
instead of require()
by itself.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With