Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to package assets with a node module

I'm trying to include some simulation data with a node module (module B) and then be able to reference that data from the calling module (module A). The data is a text file in the /data directory of module B. I have a function on module B that calls up the data using __dirname, but of course when this function is called from module A, the __dirname references the directory of module A... not module B. What's the best way to include asset data like this and make it available in the consuming module?

like image 220
Jeremy Foster Avatar asked Mar 11 '23 10:03

Jeremy Foster


1 Answers

When packaging a module you can use the files property of package.json to bundle any assets along with your module.

Then, in that module, you can use a relative path to reference your included asset.

Imagine a module with this file structure:

 -assets
   |-data.txt
 index.js

In your package.json you might have a files section that looked like:

files: [
    'index.js',
    'assets/data.txt'
]

And in index.js you could expose your asset data like so:

let fs = import 'fs';

function getAssetData() {
   return fs.readFileSync('./assets/data.txt')
}

module.exports = { getAssetData };
like image 143
duncanhall Avatar answered Mar 19 '23 22:03

duncanhall