Questions about published packages with built npm modules


#1

Please help me understand something about how meteor handles atmosphere packages with built npm modules.

Background
I have a Meteor application which is currently using Meteor version 1.3.2.4.
I am using nvm to set my node version to 0.10.46.

I have a package localpackage which uses a package csats:libxmljs published on atmosphere. csats:libxmljs depends on the NPM module libxmljs which requires building via node-gyp.

When I try to run: spacejam test-packages --release 1.3.2.4 --driver-package=practicalmeteor:mocha-console-runner I get the following error:

W20160803-15:50:21.236(-7)? (STDERR) /home/csats/.meteor/packages/meteor-tool/.1.3.2_4.1misk9x++os.linux.x86_64+web.browser+web.cordova/mt-os.linux.x86_64/dev_bundle/server-lib/node_modules/fibers/future.js:267
W20160803-15:50:21.236(-7)? (STDERR) 						throw(ex);
W20160803-15:50:21.236(-7)? (STDERR) 						      ^
W20160803-15:50:21.238(-7)? (STDERR) Error: /home/csats/.meteor/packages/csats_libxmljs/.1.0.3.17zdh6u++os.linux.x86_64+web.browser+web.cordova/npm/node_modules/libxmljs/build/Release/xmljs.node: undefined symbol: node_module_register
W20160803-15:50:21.238(-7)? (STDERR)     at Module.load (module.js:356:32)
...

I read that node_module_register is part of newer versions of Node. Thus, this error happens because the libxmljs npm module was built for a newer version of Node than my version of meteor is using.

I can make everything work by going into .meteor/packages/csats_libxmljs/1.0.3/npm/node_modules/libxmljs and running:

node-gyp configure
node-gyp rebuild

What I believe
This is because the package publisher built and published the package using the 1.4 version of Meteor tool which built the module for Node 4.

What I want to know

  • Is my conclusion correct?
  • If so, does meteor ever rebuild these npm modules for packages in the .meteor directory?
  • Can package maintainers publish packages for both Meteor 1.3 and 1.4 given that they use incompatible versions of node?
  • Should I solve this by pinning my package version to an earlier version which did work with Meteor 1.3?