2013-01-19 34 views
8

我编写了一个简单的npm模块来预编译我的把手模板,当使用django压缩器对某些客户端组件进行后处理时,发现我需要运送带有几个js文件的npm模块。如何在npm模块中引用本地文件?

目前,我只是假设没有一个与全局标志安装这个,因为我已经“硬编码”的路径,NPM模块本身我的NPM模块的

例如布局,这些依赖

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

内main.js我想用余烬

现在.js文件......目前我的硬编码的做法是这样的

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

再次 - 这只能是因为我假设你安装它本地,但我想的node.js想有一个更合法的方式来获得本地嵌入文件

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

回答

1

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

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

希望有所帮助!

3

Node.js的强大优势之一是您可以快速启动并运行。这种方法的缺点是你不得不适应它周围的设计模式。

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

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 

这个例子获取你的模板可以细化,但核心思想是一致的。