2

Building on related issue: Load "Vanilla" Javascript Libraries into Node.js

I'm trying to load a 'Vanilla' Javascript library 'rsa.js' into NodeJS, using the method described by Chris W. in the question above. In essence I've created a custom node_modules directory like this:

./node_modules/rsa/rsa-lib/rsa.js
./node_modules/rsa/rsa-lib/README
./node_modules/rsa/index.js

Only problem is, compiling the module fails on the last line of rsa.js:

undefined:836
export default rsa;
SyntaxError: Unexpected token export

rsa.js

var rsa = {};
 (function(rsa) {

   ...

})(rsa);
console.log("rsa",rsa);
export default rsa;

index.js

var fs = require('fs');

// Read and eval library
filedata = fs.readFileSync('./node_modules/rsa/rsa-lib/rsa.js','utf8');
eval(filedata);

/* The rsa.js file defines a class 'rsa' which is all we want to export */
exports.rsa = rsa

Any suggestions how to fix this problem?

Community
  • 1
  • 1
KDC
  • 1,441
  • 5
  • 19
  • 36

1 Answers1

1

The error 'Unexpected token export' is caused because the library is using

export default thingToExport;

instead of

module.exports = thingToExport

This is an ES6 feature not supported by Node (yet), so when Node tries to run the code, it throws an error.

How to solve: try modifying the last line of the library so it says module.exports = rsa;.

I should add, though, that eval is not a good way to load a library into your own code. That is what require is for. If you have installed this library with npm i and it is in your node_modules, you should be able to load it into your code with var rsa = require('rsa');.

Again though, if you're not transpiling the code, it may have problems with export default, so you will probably want to change that to module.exports either way.

otajor
  • 953
  • 1
  • 7
  • 20
  • Brilliant, swapping it for module.exports = rsa; did the trick. Also good point about the eval(), though not sure you can 'require' a vanilla javascript library... – KDC Jun 14 '16 at 14:43
  • You can require your own JS files using `require('./path/to/file.js')`, so I think you should be able to `require` someone else's javascript – otajor Jun 14 '16 at 14:49