How to reference local files in a npm module?

末鹿安然 提交于 2021-02-18 10:44:07

问题


I wrote a simple npm module to precompile my handlebars templates when using django compressor to do post-processing for some client side components and found that I need to ship the npm module with a few js files.

Currently I just assume no one is installing this with the global flag because I've "hard coded" the path to these dependencies in the npm module itself

example layout of my npm module

/
* /bin
* /lib/main.js
* /vendor/ember.js

Now inside main.js I want to use the ember.js file ... currently my hard coded approach looks like this

var emberjs = fs.readFileSync('node_modules/django-ember-precompile/vendor/ember.js', 'utf8');

Again -this only works because I assume you install it local but I'd like to think node.js has a more legit way to get locally embedded files

Anyone know how I can improve this to be more "global" friendly?


回答1:


What you can do is get the directory of the current file and make your file paths relative to that.

var path = require('path')
, fs = require('fs');

var vendor = path.join(path.dirname(fs.realpathSync(__filename)), '../vendor');
var emberjs = fs.readFileSync(vendor + '/ember.js', 'utf8');

Hope that helps!




回答2:


One of the great strengths of Node.js is how quickly you can get up and running. The downside to this approach is that you are forced to fit the design patterns it was build around.

This is an example where your approach differs too much from Nodes approach. Node expects everything in a module to be exposed from the modules exports, including templates.

Move the readFileSync into the django-ember-precompile module, then expose the returned value via a module export in lib/main.js.

Example:

package.json
    { 
    "name": "django-ember-precompile",
    "main": "lib/main.js"
    }
lib/main.js
    module.exports.ember = readFileSync('vendor/ember.js')
vendor/ember.js

You obtain your template via

var template = require('django-ember-precompile').ember

This example can be refined, but the core idea is the same.



来源:https://stackoverflow.com/questions/14417764/how-to-reference-local-files-in-a-npm-module

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!