Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to use node.js libraries that have transitive dependencies with Meteor?

Tags:

node.js

meteor

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?

like image 438
Joscha Avatar asked Feb 19 '23 11:02

Joscha


2 Answers

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!

like image 56
Prashant Avatar answered Mar 05 '23 17:03

Prashant


In the latest version of Meteor (0.6.3, and presumably onwards), you need to use Npm.require() instead of require() by itself.

like image 38
Tyler Collier Avatar answered Mar 05 '23 17:03

Tyler Collier