如何在npm模块中引用本地文件?

我编写了一个简单的npm模块来预编译我的句柄模板,当使用django压缩器对某些客户端组件进行后处理时,发现我需要用n个js文件运送npm模块。

目前我只是假设没有人使用全局标志来安装它,因为我已经在npm模块中“硬编码”了这些依赖的path

我的npm模块的示例布局

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

现在在main.js中,我想使用ember.js文件…目前我的硬编码的方法是这样的

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

再次 – 这只是因为我假设你安装本地,但我想认为node.js有更合法的方式来获取本地embedded的文件

任何人都知道我可以改进这个更“全球”的友好?

你可以做的是获取当前文件的目录,并使你的文件path相对于那个。

 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'); 

希望有所帮助!

Node.js的强大优势之一就是能够快速启动和运行。 这种方法的缺点是你不得不适应它周围的devise模式。

这是一个例子,你的方法与节点方法有很大的不同。 节点期望模块中的所有内容都可以从模块导出(包括模板)中获得。

readFileSync移动到django-ember-precompile模块中,然后通过lib/main.js的模块导出显示返回的值。

例:

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

你通过获得你的模板

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

这个例子可以细化,但核心思想是一样的。